2012-05-25 5 views
6

Ich versuche, mehrere Diagramme in einem Diagramm zu erhalten, das eine gemeinsame Legende mit facet_wrap() teilt. Die Diagramme enthalten jeweils 4 Dichteschätzungen, die mit geom_density() erstellt wurden. Dies ist ein minimales Beispiel dafür, wie die Daten aussehen. Eine Dichte wird für jede Schätzungsebene geschätzt, und für jeden Wert von xp wird eine andere Darstellung gezeichnet.Mehrere Diagramme mit mehreren Dichten 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 

kann ich ein Grundstück mit den vier Dichten konstruieren:

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

oder zwei Platten mit einer Dichte in jedem:

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

jedoch die beide zusammen nicht funktionieren und Ergebnis in einem Fehler:

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

Ich habe verschiedene Werte für Skalen ausprobiert oder ganz weggelassen, ohne Glück. Ich habe versucht, zu verfolgen, welches Objekt auf "scale_dimension" angewendet wurde, auch ohne Glück. Kann mich jemand aufklären?

+2

Nur eine Vermutung, aber könnte es etwas damit zu tun haben die Tatsache, dass Sie eine Dichte für nur zwei Werte pro Gruppe berechnen? Wenn ich ein ähnliches Diagramm unter Verwendung eines größeren Datensatzes erstelle, erhalte ich diesen Fehler nicht. – joran

+0

Vielen Dank für Ihre Antwort, dass das Problem bei der Verwendung von 'geom_density()' war. Das Problem bleibt gleich, wenn ich 'geom_line (stat = 'dichte')' though ... –

+2

Aber ... das Problem ist das gleiche, nein? Sie berechnen immer noch eine Dichte für nur zwei Werte. – joran

Antwort

2

Da kann ich keinen Kommentar, um zweite joran Vorschlag verlassen (dh ich habe nicht genug Ruf), hier eine Antwort:

von von

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

zu

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

nur 2 Datenpunkte sind für jedes Schätzer/XP-Paar übrig. Wie es scheint, ist dies nicht genug, um die Dichten zu berechnen. Zum Beispiel die folgende Codezeile funktioniert (Anmerkung data=rbind(esti,esti))

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

Auch wenn Sie geom_density durch geom_bar ersetzen, funktioniert es

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