2012-05-25 22 views
6

Sto cercando di ottenere diversi grafici su un grafico che condivide una legenda comune utilizzando facet_wrap(). I grafici contengono 4 stime di densità, ciascuna costruita usando geom_density(). Questo è un esempio minimale di come appaiono i dati. Una densità è stimata per ciascun livello di stimatore e viene tracciato un grafico diverso per ciascun valore di xp.Più grafici a più densità in 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 

posso costruire una trama con le quattro densità:

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

o due pannelli con una densità in ciascuna:

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

Tuttavia le due cose insieme non funziona e il risultato in un errore:

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

Ho provato diversi valori per le scale o l'ho omesso del tutto, senza fortuna. Ho provato a rintracciare quale oggetto veniva applicato a 'scale_dimension', ma senza fortuna. Qualcuno può illuminarmi?

+2

Solo una supposizione, ma potrebbe avere qualcosa a che fare con il fatto che stai calcolando una densità solo su due valori per gruppo? Quando creo un grafico simile utilizzando un set di dati più grande, non ottengo quell'errore. – joran

+0

Grazie per la tua risposta, questo è stato il problema quando utilizzi 'geom_density()'. Il problema rimane lo stesso quando provo a usare 'geom_line (stat = 'density')' sebbene ... –

+2

Ma ... il problema è lo stesso, no? Stai ancora calcolando una densità su solo due valori. – joran

risposta

2

Dal momento che non riesco a lasciare un commento per il suggerimento secondo di Joran (vale a dire, non ho abbastanza reputazione), qui una risposta:

Andando da

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 2 punti dati sono lasciati per ogni coppia stimatore/xp. A quanto pare, questo non è abbastanza per calcolare le densità. Per esempio, la seguente riga di codice funziona (nota data=rbind(esti,esti))

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

Inoltre, se si sostituisce geom_density da geom_bar, funziona

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