2009-10-07 3 views
8

Ich habe ein schönes facet_wrap Dichtediagramm, das ich mit ggplo2 erstellt habe. Ich möchte für jedes Panel haben x-und y-Achsen-Etiketten, anstatt nur die Y-Achsen-Etiketten auf der linken Seite und die x-Etiketten entlang der Unterseite. Was ich habe, sieht jetzt wie folgt aus:Zeige mehrere Achsenetiketten mit ggplot2 mit facet_wrap in R

library(ggplot2) 
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups) 
p 

Welche zurück:

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png

Es scheint, wie dies sollte einfach sein, aber mein Google Fu war zu arm, eine Antwort zu finden.

Antwort

8

Kurze Antwort: Sie können das nicht tun. Es könnte mit 3 Graphen sinnvoll sein, aber was wäre, wenn Sie ein großes Gitter von 32 Graphen hätten? Das würde laut und schlecht aussehen. Die Philosophie von GGplot besteht darin, das Richtige mit einem Minimum an Anpassung zu tun, was natürlich bedeutet, dass Sie die Dinge nicht so gut anpassen können wie andere Pakete.

Lange Antwort: Sie könnten es fälschen, indem Sie drei separate ggplot-Objekte erstellen und kombinieren. Aber es ist keine sehr allgemeine Lösung. Hier ist ein Code aus Hadleys Buch, der davon ausgeht, dass Sie die ggplot-Objekte a, b und c erstellt haben. Es setzt a in die obere Reihe, mit b und c in die untere Reihe.

grid.newpage() 
pushViewport(viewport(layout=grid.layout(2,2))) 
vplayout<-function(x,y) 
    viewport(layout.pos.row=x,layout.pos.col=y) 
print(a,vp=vplayout(1,1:2)) 
print(b,vp=vplayout(2,1)) 
print(c,vp=vplayout(2,2)) 
+0

Ja, ich war immer die Stimmung von ggplot „Sie nicht tun soll“. Ich werde versuchen, das Beispiel, das Sie gegeben haben, zu implementieren. Das scheint vernünftig. –

+2

Eine andere Sache, die Sie versuchen könnten, wenn Sie Bilder in Publikationsqualität benötigen, ist das Speichern des Graphen in PDF oder SVG (wenn Sie nicht in Windows sind) Format mit ggsave() und dann bearbeiten Sie das resultierende Bild mit etwas wie Inkscape . Sie könnten das untere Bild leicht verschieben und die Achse nach oben kopieren ... – Harlan

10

Sie können dies tun, indem Sie die Waage = „frei“ Option in Ihrem facet_wrap Aufruf einschließlich:

myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups, scales="free") 
p