¿Por qué recibo un error cuando intento tener un gráfico de densidad superpuesto usando ggplot2?

Quiero crear un gráfico de densidad superpuesto. Decidí usar ggplot2.

Mis datos están en formato de marco de datos. Aquí cómo se ven:

Ge<-data.frame(Ge)
dim(Ge)
#[1] 100   1
Ge[1:4,]
#[1]   6.005409  38.681342 102.079283 185.672611
dim(Tr)
#[1] 100   1
Tr[1:4,]
#[1] 12.8678547  1.3034715  1.1372413  0.7973491

Aquí está mi código para crear la trama:

library(ggplot2)

ggplot() + geom_density(aes(x=x), colour="red", data=Tr) + 
  geom_density(aes(x=x), colour="blue", data=Ge)

Pero este es el error que me sale:

    Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous
Error: stat_density requires the following missing aesthetics: x

¿Alguien me ayudaría a solucionar esto?

preguntado el 12 de junio de 14 a las 11:06

Is x el nombre de la columna en cada marco de datos? Prueba nombres names(Ge) y names(Tr). En mi ejemplo, me referí directamente a la columna que quería, Ge[,1] y eso funcionó. -

1 Respuestas

Debería usar un solo marco de datos siempre que sea posible con ggplot. Esa es la lógica detrás de la sintaxis, pero al principio no es intuitiva. Teniendo en cuenta su código de muestra, Tr y Ge son factores y hay un conjunto de valores que está representando en un eje x común.

El paquete reshape2 tiene una herramienta útil para combinar datos separados en un formato adecuado para el trazado de ggplot, melt. Consulte la documentación del paquete, pero vea a continuación el código de trabajo y un resultado de muestra.

require(ggplot2)
require(reshape2)
Ge=runif(n=100)
Tr=runif(n=100)
data=data.frame(Ge,Tr)
names(data)=c('Ge','Tr')
data=melt(data,id.vars=NULL)
ggplot(data,aes(x=value,fill=variable))+geom_density(alpha=.4)

Hay un libro de Hadley Wickham que cubre toda esta información con excelente detalle. Enlace de Amazon

Actualizar He replicado más de cerca el código del OP (alejándome de las mejores prácticas) y aún obtengo una trama funcional, aunque con una advertencia.

Ge=data.frame(runif(n=100))
Tr=data.frame(runif(n=120))

ggplot()+geom_density(aes(data=Ge,x=Ge[,1]),color='red')+
  geom_density(aes(data=Tr,x=Tr[,1]),color='blue')

No sé cómo seleccionar automáticamente la escala para un objeto de tipo data.frame. Predeterminado a continuo No sé cómo elegir automáticamente la escala para un objeto de tipo data.frame. Por defecto a continuo

Respondido el 12 de junio de 14 a las 19:06

Pero, ¿cómo es que Ge y Tr tienen una longitud diferente? - user2806363

¿Puede actualizar su pregunta con un ejemplo reproducible de lo que Ge y Tr ¿son? ¿Has probado la trama con sólo Tr y luego solo Ge? ¿Cómo funcionan esas pruebas? - scs217

Actualicé mi respuesta probando tu código y me funciona. Tal vez haya algunos problemas con sus marcos de datos. ¿Alguno de los valores NA o de un tipo diferente al numérico? Intentar summary(Ge) y summary(Tr). - scs217

Revisé, no hay NA, pero los valores están en el formato de: 3.848143e-01, ..... - user2806363

Pruebe solo el trazado Tr y luego solo Ge. Déjame saber cómo funcionan esos. Además, ¿mi publicación original soluciona tu problema? - scs217

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.