Ein Nachteil der darauf basierenden Lösungen grid.arrange
besteht darin, dass sie es schwierig machen, die Diagramme mit Buchstaben (A, B usw.) zu kennzeichnen, wie es die meisten Zeitschriften erfordern.
Ich habe das Cowplot- Paket geschrieben, um dieses (und einige andere) Probleme zu lösen, insbesondere die Funktion plot_grid()
:
library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot() + theme_bw()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) + theme_bw() +
theme(legend.position = c(0.8, 0.8))
plot_grid(iris1, iris2, labels = "AUTO")
Das zurückgegebene Objekt plot_grid()
ist ein anderes ggplot2-Objekt, und Sie können es ggsave()
wie gewohnt speichern :
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Alternativ können Sie die Cowplot-Funktion verwenden save_plot()
, bei der es sich um eine dünne Hülle handelt ggsave()
, mit der Sie auf einfache Weise die richtigen Abmessungen für kombinierte Plots ermitteln können, z.
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
(Das ncol = 2
Argument besagt, save_plot()
dass zwei Diagramme nebeneinander liegen und save_plot()
das gespeicherte Bild doppelt so breit ist.)
Eine ausführlichere Beschreibung zum Anordnen von Plots in einem Raster finden Sie in dieser Vignette. Es gibt auch eine Vignette, in der erklärt wird, wie Plots mit einer gemeinsamen Legende erstellt werden.
Ein häufiger Punkt der Verwirrung ist, dass das Cowplot-Paket das Standardthema ggplot2 ändert. Das Paket verhält sich so, weil es ursprünglich für interne Laborzwecke geschrieben wurde und wir niemals das Standarddesign verwenden. Wenn dies zu Problemen führt, können Sie einen der folgenden drei Ansätze verwenden, um diese zu umgehen:
1. Stellen Sie das Thema für jedes Diagramm manuell ein. Ich denke, es ist eine gute Praxis, immer ein bestimmtes Thema für jede Handlung anzugeben, so wie ich es + theme_bw()
im obigen Beispiel getan habe . Wenn Sie ein bestimmtes Thema angeben, spielt das Standardthema keine Rolle.
2. Setzen Sie das Standarddesign wieder auf das Standarddesign von ggplot2 zurück. Sie können dies mit einer Codezeile tun:
theme_set(theme_gray())
3. Rufen Sie die Cowplot-Funktionen auf, ohne das Paket anzuhängen. Sie können Cowplot-Funktionen auch nicht library(cowplot)
oder require(cowplot)
vorab aufrufen, indem Sie sie voranstellen cowplot::
. Das obige Beispiel mit dem Standardthema ggplot2 würde beispielsweise wie folgt lauten:
## Commented out, we don't call this
# library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) +
theme(legend.position = c(0.8, 0.8))
cowplot::plot_grid(iris1, iris2, labels = "AUTO")
Aktualisierung:
- Ab Cowplot 1.0 wird das Standardthema ggplot2 nicht mehr geändert.
- Ab ggplot2 3.0.0 können Plots direkt beschriftet werden, siehe zB hier.