合并ggplot2图表时如何保持各图表的原有比例尺寸
解决方案
你原来使用的grid.arrange默认会将所有图表塞入等大的网格单元格,会自动拉伸图表覆盖整个单元格,因此会丢失原有坐标轴比例。这里推荐使用patchwork包完成拼图需求,该包为ggplot2官方生态的拼图工具,无需手动计算不同图表的缩放比例,多图拼接时也会自动保留每个图表的原始坐标轴比例、尺寸,操作成本极低。
修正后的可运行代码
首先修正你示例代码中的两处语法错误:subset筛选条件需要用双等号==做判断,mtcars原生字段中没有mp字段,你应该是要调用原有mpg字段做计算。
# 加载所需包 library(ggplot2) library(patchwork) # 构造测试数据 data1 <- subset(mtcars, cyl == 4) data1$mpg <- data1$mpg * 5.6 data2 <- subset(mtcars, cyl == 8) # 绘制单图 p1 <- ggplot(data1, aes(wt, mpg, colour = cyl)) + geom_point() p2 <- ggplot(data2, aes(wt, mpg, colour = cyl)) + geom_point() # 并排拼接,自动保留各自坐标轴比例 p1 + p2
多图拼接扩展
如果需要拼接超过2个图表,直接按顺序拼接即可,也可以通过plot_layout参数指定行列数,全程不需要手动设置比例:
# 示例:3张图按2行排列,自动适配每个图的尺寸比例 p1 + p2 + p3 + plot_layout(nrow = 2)
如果需要固定每张图自身的坐标轴宽高比,可以给单图添加coord_fixed(ratio = 你需要的比例)参数,patchwork拼接时会完整保留该比例,不会做拉伸处理。
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

