Wie Sie herausgefunden haben, gibt es keine einfache Lösung, aber es kommt viel auf. Da diese Art von Ding so oft gefragt wird, finde ich es hilfreich zu erklären warum das ist schwer, und schlagen eine mögliche Lösung vor.
Meine Erfahrung ist, dass die Menschen im Grunde den Zweck der Facettierung mißverstehen zu ggplot2 oder Gitter Grafiken kommen (oder trellising, in Gitter). Diese Funktion wurde mit einer sehr spezifischen Idee entwickelt: die Visualisierung von Daten über mehrere Gruppen hinweg, die eine gemeinsame Skala teilen. Es kommt von etwas, das das Prinzip der kleinen Vielfachen genannt wird und von Tufte und anderen vertreten wird.
Das Platzieren von Platten nebeneinander mit sehr unterschiedlichen Maßstäben ist etwas, das visuelle Design-Experten neigen zu vermeiden, weil es im besten Fall irreführend sein kann. (Ich schimpfe Sie nicht hier, nur die Begründung zu erklären ...)
Aber natürlich, sobald Sie dieses großartige Werkzeug in der Öffentlichkeit haben, wissen Sie nie, wie die Leute es verwenden werden. So wird es gestreckt: Die Anforderungen kommen in die Fähigkeit, die Skalen je nach Panel variieren zu lassen und verschiedene Aspekte des Plots für jedes Panel getrennt einzustellen. Und so facettiert in ggplot2 wurde weit über seine ursprüngliche Absicht erweitert.
Eine Konsequenz daraus ist, dass einige Dinge schwierig zu implementieren sind, einfach aufgrund der ursprünglichen Designabsicht der Funktion. Dies ist wahrscheinlich ein solches Beispiel.
Ok, genug Erklärung. Hier ist meine Lösung.
Der Trick hier ist zu erkennen, dass Sie nicht Diagramme grafisch darstellen, die eine Skala teilen. Für mich bedeutet das, dass Sie gar nicht daran denken sollten, Facettierungen zu verwenden. Stattdessen jede Parzelle separat machen, und ordnen sie zusammen in einem Grundstück:
library(gridExtra)
p1 <- ggplot(subset(melted.df,variable == 'dollars'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density() +
scale_x_log10(labels = dollar_format())
p2 <- ggplot(subset(melted.df,variable == 'counts'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density()
grid.arrange(p1,p2)
ich auf das, was gerade erraten haben geom_*
Sie verwenden wollten, und ich bin sicher, das ist nicht wirklich Was Sie planen wollten, aber es illustriert zumindest das Prinzip.
nicht einfach, denke ich ... –
Ja. Scheißt. Ich bin gerade auf diesen Link gestoßen, wo jemand ein ähnliches Problem hatte: http://comments.gmane.org/gmane.comp.lang.r.gplot2/4496. –
Wahrscheinlich einfacher, zwei getrennte Plots zu machen und sie zusammen zu ordnen. –