发表文章一般都要求将多个相关的图组合成单个图,并标上A,B,C等标签。所以总结一下R语言绘图的一页多图,以及多图的拼接,子母图等的各种实现方法,!
R一页多图
cowplot:基于ggplot的可视化系统
简介
cowplot是一个ggplot2包的简单补充,意味着其可以为ggplot2提供出版物级的主题等。更重要的是,这个包可以组合多个”ggplot2”绘制的图为一个图,并且为每个图加上例如A,B,C等标签, 这在具体的出版物上通常是要求的。
代码
|
|
结果
注意:其中draw_plot(plot, x = 0, y = 0, width = 1, height = 1, scale = 1),坐标参数范围为0-1,相当于每幅图占画布长宽的百分比
rmisc包中的multiplot函数实现上述相同效果
简单高效,一句话搞定!可以实现上述同样的结果。
代码
|
|
下面看看源码中multiplot函数,本质是grid包!!
源代码
|
|
grid包实现上述相同效果
代码
|
|
使用gridExtra包实现上述相同效果
|
|
结果
单个图的标签(A,B,C)位置和属性不是很方便调整
使用gridExtra包实现多图的轴向组合
代码
|
|
结果
其实绘制这种组合图已经有相应的R包了–ggExtra
代码
|
|
ggExtra包中最主要的函数ggMarginal - Add marginal histograms/boxplots/density plots to ggplot2 scatterplots
子母图
适用场景
当做分组条形图时,有时碰到一组数据特北大,其他组数据特别小,这时候就不太美观了。可能你想到的第一个办法是截断,但其实还可以用字母图,形成局部放大的效果,既可以从整体上对比,又兼顾特别小的数据组可以轻松查看,而没必要单独做两张图。
代码
|
|
结果
关键代码就是利用了grid包的viewport函数,viewport简单说就是图形中一块矩形区域(类似于图层),是在这个区域中进一步绘图的基础。所以我们可以利用viewport函数在任意指定位置将两个或者多个图进行拼接~
ggplot2之分组和分面
以上是不同数据来源的图,以不同展现形式组合成一个图,另外ggplot2对一个数据集合进行分组,通过分面绘图,也算是实现一页多图的效果吧~
代码
|
|
结果
可以看到结果并不是很好,横轴标签每个分组(BP,CC,MF)均含有13个通路,这是三个分组富集到的GO通路的交集,空值显示出来并不太美观
解决
|
|
结果
主要通过给数据框加一列来对每一组进行排序输出
参考
(4)Add labels to a plot made by grid.arrange from multiple plots
(6)利用ggplot将多个图形组合在一起(推荐-置信椭圆)