Wie erzwinge ich, dass mehrere r-Diagramme dieselbe Länge von x-Ticks haben? [Duplikat]

Nov 26 2020

Mehrere Pakete in R können mehrere Diagramme in einem Raster anordnen, z. B. gridExtraund 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 baseund ggplot2diese nicht festlegt und cowplot::plot_griddie 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_wrapdieses Problem lösen sollte, aber ich frage mich immer noch, ob es eine direktere Lösung gibt.

Antworten

2 teunbrand Nov 26 2020 at 14:33

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)

1 ClausWilke Nov 27 2020 at 06:53

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)