能否在单张图中绘制多个EnhancedVolcano图?par(mfrow)无效求助
问题原因
EnhancedVolcano是基于ggplot2开发的可视化工具,返回的是ggplot对象。而par(mfrow)是base R绘图系统的布局控制命令,仅对base R原生绘图函数(如plot())有效,无法控制ggplot对象的排列,因此最后绘制的图会覆盖前面的,导致只显示最后一张。
解决方法
可以通过ggplot生态的布局工具来实现多图拼接,以下是两种常用方案:
方案1:使用patchwork包(推荐,语法简洁)
先安装依赖包(若未安装):
install.packages("patchwork")
修改后的代码示例:
library(EnhancedVolcano) library(patchwork) # 分别生成两个火山图对象 p1 <- EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue') p2 <- EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'padj') # 保存横向排列的组合图 png("volcano.png", width=480*2) p1 + p2 # 用`p1 / p2`可实现纵向排列 dev.off()
方案2:使用gridExtra包
先安装依赖包(若未安装):
install.packages("gridExtra")
修改后的代码示例:
library(EnhancedVolcano) library(gridExtra) # 分别生成两个火山图对象 p1 <- EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue') p2 <- EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'padj') # 保存横向排列的组合图 png("volcano.png", width=480*2) grid.arrange(p1, p2, ncol=2) # ncol=2设置为2列,nrow=2可设置为2行 dev.off()
内容的提问来源于stack exchange,提问作者Shiping
相关产品推荐
相关产品推荐

