2012-05-25 8 views
6

Estoy tratando de obtener varias gráficas en un gráfico compartiendo una leyenda común usando facet_wrap(). Las parcelas contienen 4 estimaciones de densidad cada una construida usando geom_density(). Este es un ejemplo mínimo de cómo se ven los datos. Se estima una densidad para cada nivel de estimador, y se dibuja una gráfica diferente para cada valor de xp.Múltiples gráficas con múltiples densidades en ggplot2

> esti 
    estimator  value   xp 
1  OLS Oracle 0.35757317 N= 10 T= 100 
2  OLS Oracle 0.50540655 N= 10 T= 100 
3  OLS Full 0.02276872 N= 10 T= 100 
4  OLS Full 0.53616020 N= 10 T= 100 
5   Lasso 0.00000000 N= 10 T= 100 
6   Lasso 0.30448578 N= 10 T= 100 
7 Adaptive Lasso 0.00000000 N= 10 T= 100 
8 Adaptive Lasso 0.49949267 N= 10 T= 100 
9  OLS Oracle 0.48392914 N= 10 T= 500 
10  OLS Oracle 0.53685915 N= 10 T= 500 
11  OLS Full 0.50565482 N= 10 T= 500 
12  OLS Full 0.61407003 N= 10 T= 500 
13   Lasso 0.38342782 N= 10 T= 500 
14   Lasso 0.52012928 N= 10 T= 500 
15 Adaptive Lasso 0.47951875 N= 10 T= 500 
16 Adaptive Lasso 0.53222172 N= 10 T= 500 

puedo construir una trama con las cuatro densidades:

library('ggplot2') 
ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density() 

o dos paneles con una densidad en cada uno:

ggplot(data=esti,aes(x=value)) + geom_density() +facet_wrap(~xp,scales='free_y') 

Sin embargo los dos juntos no funciona y el resultado en un error:

> ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density() +facet_wrap(~xp,scales='free_y') 
Error in UseMethod("scale_dimension") : 
    no applicable method for 'scale_dimension' applied to an object of class "NULL" 

He probado diferentes valores para escalas, u omitirlas por completo, sin suerte. Intenté rastrear qué objeto se estaba aplicando a 'scale_dimension', sin suerte tampoco. ¿Alguien puede iluminarme?

+2

Sólo una conjetura, pero podría tener algo que ver con el hecho de que está calculando una densidad en solo dos valores por grupo? Cuando creo un diagrama similar usando un conjunto de datos más grande no obtengo ese error. – joran

+0

Gracias por su respuesta ese fue el problema al usar 'geom_density()'. El problema sigue siendo el mismo cuando trato de usar 'geom_line (stat = 'densidad')' aunque ... –

+2

Pero ... el problema es el mismo, ¿no? Aún está calculando una densidad en solo dos valores. – joran

Respuesta

2

Ya que no puedo dejar un comentario con el fin de sugerencia segundos de Joran (es decir, no tengo la reputación suficiente), aquí una respuesta:

al pasar de

ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density() 

a

ggplot(data=esti,aes(x=value,colour=estimator)) 
+ geom_density() +facet_wrap(~xp,scales='free_y') 

solo quedan 2 puntos de datos para cada par de estimador/xp. Como parece, esto no es suficiente para calcular las densidades. Por ejemplo, la siguiente línea de código funciona (nota data=rbind(esti,esti))

ggplot(data=rbind(esti,esti),aes(x=value,colour=estimator)) 
+ geom_density() +facet_wrap(~xp,scales='free_y') 

Además, si se reemplaza geom_density por geom_bar, funciona

ggplot(data=esti,aes(x=value,colour=estimator)) 
+ geom_bar() +facet_wrap(~xp,scales='free_y') 
Cuestiones relacionadas