ggplot2一页多图排版的简便方法

如题所述

第1个回答  2022-06-13

更好的阅读体验>>

要想在同一页面上排列多个ggplot2图形,基本的R函数 par() 和 layout() 是无效的。解决方案之一是使用 gridExtra 包中的一些函数来排版多个图形:

但是,这几个函数并不能按照图形轴线排列整齐,只能是按图形原样依次排列(如下图所示)。如果想多个图按照轴线对齐排列,可以使用 cowplot 包中的 plot_grid() 函数。但是,cowplot 包并不包含在多个页面排列多个图形的功能。因此,解决方案就是使用ggpubr包中的 ggarrange() 函数来实现该功能,此外,该函数还可以为多个图形创建统一的图例。
下面将介绍如何使用 ggpubr , cowplot gridExtra 包在同一页面和多个页面上排列多个图形以及如何输出图形到文件中。

ggpubr包的安装可以参考这篇文章-->> ggpubr:快速绘制用于发表的图形 。

数据:ToothGrowth 和mtcars数据集

绘制4个不同的图形:

绘制箱线图和点图:

绘制条形图和散点图:

使用ggpubr包中的 ggarrange() 函数来排版多个图形:

或者,也可以使用cowplot包中的plot_grid()函数:

或者,也可以使用gridExtra包中的 grid.arrange() 函数:

使用 annotate_figure() 函数:

例如,当需要将风险表放在生存曲线下方时,便需要将两个图形的绘图区对齐。

ggsurv 是一个包含以下两个部分的列表:

绘制生存曲线和风险表:

对齐纵坐标轴:

使用嵌套的ggarrange() 函数:

使用函数ggdraw() + draw_plot() + draw_plot_label()可以将图形放置在特定位置。
用 ggdraw() 函数创建一个空画布:

画布中的坐标位置:

draw_plot_label() ,在图的左上角添加图标签:

排版多个图形:

使用 arrangeGrop() 函数可以修改图形的行列跨度:

可以使用grid 包中的 grid.layout() 函数来创建复杂的布局。另外,它还提供了函数 viewport() 来定义布局上的区域或视图。函数 print() 用于将图放置在指定区域中。
一般步骤如下:

要将通用图例放在组合图的边缘,可以将 ggarrange() 函数与以下参数一起使用:

下面将展示如何使用iris 数据集在图表旁边添加文本和表格。
首先绘制下面几个图形:

最后使用 ggarrange() 函数进行排版。

ggplot2中的 annotation_custom() 函数可用于在ggplot的绘图区域内添加表,图形或其他基于网格的元素。其基本格式为:

导入背景图。 根据背景图的格式,可以使用jpeg 包中的函数 readJPEG() 或png包中的函数 readPNG() 。

将ggplot与背景图合并:

使用alpha参数修改箱线图的透明度:

将法国地图作为另一个图形的背景图:

如果图形数量很多,就需要将其放置在多个页面上了,而 ggarrange() 函数便可以实现这种功能。当指定了 nrow 和 ncol 之后, ggarrange() 函数便可以自动计算排版所有图形所需的页数。

也可以使用 ggexport() 函数到处为文件:

PDF file: multi.page.ggplot2.pdf
也可以使用 marrangeGrob() 函数实现多页输出。

使用函数 ggexport() 。
首先绘制四个图形:

然后,可以将单个图形导出到文件(pdf,eps或png),导出时还可以进行排版。
将单个图导出到pdf文件(每页一个图):

排版并导出: