2012-05-25 17 views
6

Próbuję uzyskać kilka działek na wykresie udostępniającym wspólną legendę za pomocą metody facet_wrap(). Wykresy zawierają 4 oszacowania gęstości, każdy skonstruowany przy użyciu funkcji geom_density(). Jest to minimalny przykład tego, jak dane wyglądają. Jedna gęstość jest szacowana dla każdego poziomu estymatora, a dla każdej wartości xp rysowany jest inny wykres.Wiele działek o wielu gęstościach w 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 

można zbudować jedną działkę z czterech gęstości:

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

lub dwa panele z jednej gęstości w każdym:

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

Jednak oba razem nie działa i wynik w błędzie:

> 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" 

Próbowałem różnych wartości dla łuski lub pomijałem ją zupełnie, bez powodzenia. Próbowałem śledzić, który obiekt był stosowany do "scale_dimension", bez powodzenia. Czy ktoś może mnie oświecić?

+2

tylko domyślać, ale to może mieć coś wspólnego z fakt, że obliczasz gęstość tylko na dwie wartości na grupę? Kiedy utworzę podobny wykres za pomocą większego zestawu danych, nie otrzymam tego błędu. – joran

+0

Dziękuję za odpowiedź, która była problemem podczas używania 'geom_density()'. Problem pozostaje ten sam, gdy próbuję użyć 'geom_line (stat = 'density')' chociaż ... –

+2

Ale ... problem jest taki sam, nie? Nadal obliczasz gęstość tylko na dwóch wartościach. – joran

Odpowiedz

2

Ponieważ nie mogę komentarz w celu sugestię drugiego Jøran pozostawiają (tj, nie mam wystarczającej reputacji), oto odpowiedź:

Przechodząc od

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

do

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

tylko 2 punkty danych pozostały dla każdej pary estymatorów/PD. Jak się wydaje, nie wystarcza to do obliczenia gęstości. Na przykład następujący wiersz kodu działa (uwaga data=rbind(esti,esti))

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

Ponadto, jeśli zastąpić geom_density przez geom_bar, działa

ggplot(data=esti,aes(x=value,colour=estimator)) 
+ geom_bar() +facet_wrap(~xp,scales='free_y') 
Powiązane problemy