连接两个图形(一个在另一个)GWAS

时间:2018-12-17 09:58:36

标签: r ggplot2 plot datagrid

我有这段代码可以生成2种不同类型的图形(曼哈顿图和QQ图)

# Set up the work directory in which all data is gonna be extracted
gwasResults2 = read.csv("DWStem.csv") #Change name of the file
library(qqman) #Run to create plots
library(cowplot)
library(extrafont)
library(grid)
library(cowplot)
library(gridExtra)
MH <- manhattan(gwasResults2, chr="CHR", bp="BP", snp="SNP", p="P", 
                     col = c("chartreuse2", "darkorange1", "gold1"),ylim=c(0,-log10(1e-06)), chrlabs = NULL,
                     suggestiveline = -log10(1e-03), genomewideline = -log10(1e-05),
                     highlight = NULL, logp = TRUE, annotatePval = NULL,
                     annotateTop = TRUE, main='DWStem')
QQ <- qq(gwasResults2$P, main='DWStem', pch = 24, cex=1, col="gold", bg="brown1", lwd=1, xlim=c(0,5), ylim=c(0,5)) #Run to create qqplot $P need to be there!

Total <- plot_grid(MH, QQ, labels = c("a", "b"), ncol = 2)

但是显然我不能将它们放在一起,因为我遇到下一个错误:

  

plot_to_gtable(x)中的错误:         参数必须是“ ggplot”,“ gtable”,“ grob”,“ recordedplot”类,或者是在调用时会绘制到R图形设备的函数,但它是一个列表

关于如何解决的任何想法? 提前谢谢! :D

1 个答案:

答案 0 :(得分:1)

函数manhattanqq产生基本图形,而不是网格图形。您需要使用基本的图形方法进行布局。例如,使用可复制的数据,

par(mfrow=c(1,2))
manhattan(gwasResults, main = "a")
qq(gwasResults$P, main = "b")

产生

screenshot

如果您的绘图使用了网格图形(由gridggplot2lattice生成),则您的方法将有效。如果有些使用网格,有些使用基本图形,则可以将它们混合在同一显示中,但这并不容易。请参阅gridBasegridGraphics软件包。

编辑添加:

如果您安装了gridGraphics,则将基本图形与网格图形混合起来实际上并不是很糟糕。您只需将MHQQ设置为生成图形的函数,而不是图形本身。例如,

MH <- function() { manhattan(gwasResults) }
QQ <- function() { qq(gwasResults$P) }
Total <- plot_grid(MH, QQ, labels = c("a", "b"), ncol = 2)

打印Total时,您会得到以下提示:

screenshot

图形丢失了y轴标签,但看起来还不错。