查看原文
其他

利用 cowplot 包快速对齐图片

我才是赵西西 庄闪闪的R语言手册 2023-08-11

点击下方公众号,回复资料分享,收获惊喜

小编在撰写科研论文时,经常会使用 gridExtra[1] 包中 grid.arrange() 函数将多个图形进行组合展示。

以前基本使用默认几个参数就完事了,最近发现如果图形画布大小不同,组合后的图形会出现不对齐的问题,例如:(竖直方向上不对齐:下图标注的红线),看上去比较凌乱。

library(ggplot2)
library(gridExtra)

df <- data.frame(
  x = 1:10, y1 = 1:10, y2 = (1:10)^2, y3 = (1:10)^3, y4 = (1:10)^4
)

p1 <- ggplot(df, aes(x, y1)) + geom_point()+
  theme_bw()
p2 <- ggplot(df, aes(x, y2)) + geom_point()+
  theme_bw()
p3 <- ggplot(df, aes(x, y3)) + geom_point()+
  theme_bw()
p4 <- ggplot(df, aes(x, y4)) + geom_point()+
  theme_bw()

grid.arrange(p1, p2, p3, p4,nrow=2)

在搜集资料后发现cowplot[2]包能通过简单参数设置来快速对齐图片。小编以前介绍过这个包,可见:cowplot包,ggplot2图形排版R包cowplot包:用R添加水印

接下来看看,它是怎么实现的~

对齐后的图片

cowplot 包中的 plot_grid() 函数可以直接完成子图的对齐和排列。通过设置参数 aligh = 'v' 可以实现竖直方向对齐,aligh = 'h' 可以实现水平方向对齐,aligh = 'hv' 同时在两个方向对齐。

plot_grid(p1, p2, p3, p4, align = 'v')

此时,前面出现的问题基本解决了~接下来看看,其他常用的参数设置。

自动生成子图序号

如果需要给每个子图加上序号,设置参数  labels = "AUTO" 添加大写标签,labels = "auto" 添加小写标签。

plot_grid(p1, p2, p3, p4,align = 'v',labels = 'AUTO'#添加大写标签

调整图片长和宽的比例

修改参数 rel_widthsrel_heights 的值,就可以调整子图的长和宽的比例。例如,在一个两列的复合图中,rel_widths = c(2,1) 将使第一列子图的宽度是第二列的两倍。rel_heights 的工作原理与 rel_widths 相同,但用于行而不是列。

plot_grid(
p1, p2, p3, p4,
align = 'hv',
rel_heights = c(2,1),
rel_widths = c(1,2)
)

插空排列图形

如果想要插空排列子图,只需要将对应位置的子图设置为 NULL

plot_grid(
p1, NULL, NULL, p2, p3, NULL,
ncol = 2,
align = "v"
)

适用于非 ggplot 生成的图形

对于非 ggplot 生成的图形,plot_grid() 函数也同样适用:

plot_grid(
p1, NULL, NULL, p2, p3, NULL,
ncol = 2,
align = "v"
)

小编有话说

  • 多个图形合并在科研写作中非常常用。一种方式:通过 R 软件进行合并,并标注出对应信息,如本文所说。另一种方式:通过 LaTeX 的多图合并代码展示,如:LaTeX文档多图排版笔记

参考资料

[1]

gridExtra: https://cran.r-project.org/web/packages/gridExtra/index.html

[2]

cowplot: https://cran.r-project.org/web/packages/cowplot/vignettes/introduction.html


相关推荐

colourpicker包:图形颜色拾取器


visdat包:助你一眼看穿数据结构和缺失值!


report包:助你自动出统计报告!


reticulate包|数据科学者的福音


ggThemeAssist包:交互式修改图形主题

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存