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