如何使用patchwork对齐多张绘图的底部坐标轴?
解决patchwork对齐带coord_fixed绘图的底部坐标轴问题
因为coord_fixed()强制了绘图的宽高比,两个图的y轴范围不同会导致面板高度不一致,进而底部坐标轴错位。这里提供两种可行方案:
方案1:统一两个图的y轴范围
先获取两个图的y轴极值,统一设置ylim,确保面板高度一致:
require(ggplot2) require(patchwork) # 生成原始绘图 g1 <- ggplot() + geom_point(aes(x = sort(rnorm(100)), y = sort(rnorm(100)))) + geom_abline(slope = 1, linetype = 'dashed') + coord_fixed() g2 <- ggplot() + geom_point(aes(x = sort(rnorm(100)), y = 2*sort(rnorm(100)))) + geom_abline(slope = 1, linetype = 'dashed') + coord_fixed() # 获取两个图的y轴范围极值 y_range <- range( ggplot_build(g1)$layout$panel_params[[1]]$y.range, ggplot_build(g2)$layout$panel_params[[1]]$y.range ) # 统一设置ylim g1_aligned <- g1 + ylim(y_range) g2_aligned <- g2 + ylim(y_range) # 组合绘图,底部坐标轴自动对齐 (g1_aligned + g2_aligned) + plot_layout(widths = c(1,1))
方案2:使用patchwork的align参数
直接在plot_layout中指定align = "bottom",强制底部对齐:
(g1 + g2) + plot_layout(widths = c(1,1), align = "bottom")
这种方法无需修改y轴范围,但如果两个图的面板高度差异过大,可能会导致绘图元素被压缩/拉伸,优先推荐方案1。
内容的提问来源于stack exchange,提问作者cbowers
相关产品推荐
相关产品推荐

