我有这段代码可以生成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
答案 0 :(得分:1)
函数manhattan
和qq
产生基本图形,而不是网格图形。您需要使用基本的图形方法进行布局。例如,使用可复制的数据,
par(mfrow=c(1,2))
manhattan(gwasResults, main = "a")
qq(gwasResults$P, main = "b")
产生
如果您的绘图使用了网格图形(由grid
,ggplot2
或lattice
生成),则您的方法将有效。如果有些使用网格,有些使用基本图形,则可以将它们混合在同一显示中,但这并不容易。请参阅gridBase
和gridGraphics
软件包。
编辑添加:
如果您安装了gridGraphics
,则将基本图形与网格图形混合起来实际上并不是很糟糕。您只需将MH
和QQ
设置为生成图形的函数,而不是图形本身。例如,
MH <- function() { manhattan(gwasResults) }
QQ <- function() { qq(gwasResults$P) }
Total <- plot_grid(MH, QQ, labels = c("a", "b"), ncol = 2)
打印Total
时,您会得到以下提示:
图形丢失了y轴标签,但看起来还不错。