Wie erzwinge ich, dass mehrere r-Diagramme dieselbe Länge von x-Ticks haben? [Duplikat]
Mehrere Pakete in R können mehrere Diagramme in einem Raster anordnen, z. B. gridExtra
und cowplot
. Die Diagramme in derselben Zeile / Spalte sind standardmäßig an ihrer Grenze ausgerichtet. Das Folgende ist ein Beispiel. Drei Histogramme sind vertikal auf demselben Diagramm angeordnet. Sie können feststellen, dass die X-Ticks nicht ausgerichtet sind und das Rasterplot daher etwas hässlich aussieht.
library(ggplot2);library(grid);library(cowplot)
p1 <- ggplot(data = NULL, aes(x = rt(10,19))) +
geom_histogram(bins = 5, fill = "darkgreen", color = "darkgrey", alpha = 0.6) +
labs(y = "", x = "")
# similar plots for p2, p3
plot_grid(p1, textGrob("N=10"),
p2, textGrob("N=100"),
p3, textGrob("N=10000"),
nrow=3, rel_widths = c(4/5, 1/5))

Das Problem ist, dass das Plotten von Werkzeugen die Länge von X-Ticks festlegt base
und ggplot2
diese nicht festlegt und cowplot::plot_grid
die Plots automatisch auf die maximale Breite streckt. Einige der Diagramme haben breitere y-Beschriftungen, sodass sie kürzere x-Ticks aufweisen.
Jetzt möchte ich das Drei-Histogramm zwingen, die gleiche Länge von x-Ticks zu haben. Ich würde gerne wissen, ob es eine Methode / ein Paket für diese Art von Problemen gibt. Beachten Sie, dass normalerweise eine Datenumformung in Kombination mit Funktionen wie ggplot2::facet_wrap
dieses Problem lösen sollte, aber ich frage mich immer noch, ob es eine direktere Lösung gibt.
Antworten
Ich persönlich denke, dass Patchwork die Ausrichtung der Diagramme elegant handhabt und Sie die Diagramme eine x-Achse teilen können, indem Sie die Grenzwerte auf einer gemeinsamen Skala festlegen.
library(ggplot2)
library(patchwork)
set.seed(123)
plots <- lapply(c(10, 100, 1000), function(n) {
ggplot(mapping = aes(x = rt(n, 19))) +
geom_histogram(bins = round(sqrt(n)) * 2,
fill = "darkgreen", colour = "darkgrey",
alpha = 0.6) +
labs(y = "", x = "")
})
plots[[1]] / plots[[2]] / plots[[3]] &
scale_x_continuous(limits = c(-5, 5),
oob = scales::oob_squish)
Erstellt am 26.11.2020 durch das reprex-Paket (v0.3.0)
Die plot_grid()
Funktion kann Diagramme ausrichten, siehe hier:https://wilkelab.org/cowplot/articles/aligning_plots.html
library(ggplot2)
library(grid)
library(cowplot)
set.seed(123)
plots <- lapply(c(10, 100, 1000), function(n) {
ggplot(mapping = aes(x = rt(n, 19))) +
geom_histogram(bins = round(sqrt(n)) * 2,
fill = "darkgreen", colour = "darkgrey",
alpha = 0.6) +
labs(y = "", x = "") +
scale_x_continuous(
limits = c(-5, 5),
oob = scales::oob_squish
)
})
plot_grid(
plots[[1]], textGrob("N=10"),
plots[[2]], textGrob("N=100"),
plots[[3]], textGrob("N=10000"),
nrow=3, rel_widths = c(4/5, 1/5), align = "v", axis = "l"
)
Erstellt am 26.11.2020 durch das reprex-Paket (v0.3.0)