¿Por qué recibo un error cuando intento tener un gráfico de densidad superpuesto usando ggplot2?
Frecuentes
Visto 2,633 equipos
0
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?
1 Respuestas
0
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 r or haz tu propia pregunta.
Is
x
el nombre de la columna en cada marco de datos? Prueba nombresnames(Ge)
ynames(Tr)
. En mi ejemplo, me referí directamente a la columna que quería,Ge[,1]
y eso funcionó. - scs217