利用 cowplot 包快速对齐图片

简介: 利用 cowplot 包快速对齐图片

小编在撰写科研论文时,经常会使用 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


目录
打赏
0
0
0
0
13
分享
相关文章
简化开发流程 低代码技术优势全解析
低代码开发通过可视化界面、预建模板和拖放操作简化开发流程,加速企业数字化转型。Zoho Creator等平台提供丰富模板、自动化工作流和第三方集成,降低开发成本,提高效率,成为未来应用开发趋势。
148 1
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames
执行 `DimPlot` 函数时遇到错误 `;Error in Ops. data. frame(g guides_loc, panel_loc) : &#39;==&#39; only defined for equally-sized data frames`。解决方案和办法
2044 0
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames
|
11月前
【Mac用户必看】解锁Word新技能:在Microsoft Word中优雅融入LaTeX公式,科研办公两不误的高效秘籍!
【8月更文挑战第2天】【Mac 系统】探索Word中LaTeX公式的优雅融入之道
1132 10
都8102年了,还用fastq-dump,快换fasterq-dump吧
之前写过一篇文章Fastq-dump: 一个神奇的软件, 详细介绍了fastq-dump的用法。 虽然fastq-dump参数很多,而且一直被吐槽参数说明写的太差,但是如果真的要用起来其实也就是一行代码 fastq-dump --gzip --split-3 --defline-qual &#39;+&#39; --defline-seq &#39;@$ac-$si/$ri&#39; SRRXXXXX| SRRXXXX.sra # 加上--gzip后需要时间进行文件压缩 当然除了参数问题,还有一个让人诟病的地方就是他只能单个线程,所以速度特别的慢。
5127 0
都8102年了,还用fastq-dump,快换fasterq-dump吧
R绘制多彩的森林图:基于ggplot2
R绘制多彩的森林图:基于ggplot2
544 1
【机器学习】贝叶斯统计中,“似然”和“后验概率”有什么区别?
【5月更文挑战第11天】【机器学习】贝叶斯统计中,“似然”和“后验概率”有什么区别?
开发者的瑞士军刀:DevToys带你探索更简单、更便捷的开发方式
开发者的瑞士军刀:DevToys带你探索更简单、更便捷的开发方式
207 0
Qt QLinkedList 详解:从底层原理到高级用法
Qt QLinkedList 详解:从底层原理到高级用法
393 0
R 问题|如何合并图形并共享同一个图例?
R 问题|如何合并图形并共享同一个图例?
571 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问