r - 如何强制多个 r 图具有相同长度的 x 刻度?

标签 r ggplot2 data-visualization gridextra cowplot

R 中的多个包能够将多个绘图排列到网格中,例如 gridExtracowplot 。同一行/列中的图默认在其边界上对齐。下面是一个例子。三个直方图垂直排列在同一图上。您可以注意到 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))

example grid plot

问题在于 base 中的绘图工具和ggplot2不会修复 x-ticks 和 cowplot::plot_grid 的长度只是自动将绘图拉伸(stretch)到最大宽度。有些图具有更宽的 y 标签,因此它们最终会具有更短的 x 刻度。

现在我想强制三个直方图具有相同的 x 刻度长度。我想知道有没有解决此类问题的方法/包?请注意,数据 reshape 通常与 ggplot2::facet_wrap 等函数结合使用。应该可以解决这个问题,但我仍然想知道是否有更直接的解决方案。

最佳答案

我个人认为 patchwork 可以优雅地处理图的对齐,并且您可以通过设置公共(public)比例的限制来使图共享 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 package于2020年11月26日创建(v0.3.0)

关于r - 如何强制多个 r 图具有相同长度的 x 刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65017300/

相关文章:

r - 如何使用咕噜声 :map() to read sheets from multiple excel files?

authentication - 我使用 yeroon.net/ggplot2 登录 Google 电子表格有多安全

python - 在 Python pandas 中,如何存储 value_counts 的列名称?

python - 如何在 bokeh python 中捕获下拉小部件的值?

r - ggplot2 Facet Wrap 按 y 轴重新排序,而不是 x 轴

python - python中的神经网络感受野可视化

r - 从 POSIXct 对象中减去一年

r - R中的参数检查

r - 在R中按组查找最长的值序列

r - 使用两个不同长度的数据集在同一图形和比例中创建箱线图