複数のrプロットに同じ長さのxティックを強制する方法は?[複製]

Nov 26 2020

Rのいくつかのパッケージは、次のような、グリッドにmulitpleプロットを手配することができますgridExtracowplot。同じ行/列のプロットは、デフォルトで境界に揃えられます。以下はその一例です。3つのヒストグラムが同じプロットに垂直に配置されています。xティックがアルグされていないため、グリッドプロットが少し見苦しいことがわかります。

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))

問題は、ツールをプロットすることであるbaseとすると、ggplot2X-ティックの長さを固定しないだろうとcowplot::plot_gridだけで、自動的に最大幅にプロットを伸ばします。一部のプロットには幅の広いyラベルがあるため、xティックが短くなります。

次に、3つのヒストグラムに同じ長さのxティックを強制します。この種の問題の方法/パッケージはありますか?通常、データの再形成とのような機能を組み合わせるggplot2::facet_wrapことでこの問題を解決できるはずですが、もっと直接的な解決策があるかどうかはまだ疑問です。

回答

2 teunbrand Nov 26 2020 at 14:33

個人的には、パッチワークがプロットの配置を適切に処理し、共通のスケールで制限を設定することで、プロットにx軸を共有させることができると思います。

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)

reprexパッケージ(v0.3.0)によって2020-11-26に作成されました

1 ClausWilke Nov 27 2020 at 06:53

このplot_grid()関数はプロットを整列させることができます。ここを参照してください: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"
)

reprexパッケージ(v0.3.0)によって2020-11-26に作成されました