我想知道是否可以将此行为封装在单个函数中。基本上,我有以下代码,用于从http://gettinggeneticsdone.blogspot.ca/2010/07/qq-plots-of-p-values-in-r-using-base.html
改编的p值的q值图。我第一次尝试在y = x轴上绘制带有系列标签和红线的图形,然后在后续调用中使用指定的颜色仅添加来自不同数据帧的其他点。但是,这些行为都不像我预期的那样。如果我没有明确设置par(new = TRUE),第二次调用ggd.qqplot()将覆盖第一个。如果我明确地调用它,那么这两个图是相互叠加的(不仅仅是点而是轴等)。我在if语句中应该做的正确检查是什么......如果可行的话。
ggd.qqplot = function(pvector, color="black", main=NULL, ...) {
o = -log10(sort(pvector,decreasing=F))
e = -log10( 1:length(o)/length(o) )
if(par()$new) {
points(e,o,cex=1, col=color)
}
else {
par(new=TRUE);
plot(e,o,pch=19,cex=1, col=color, main=main, ...,
xlab=expression(Expected~~-log[10](italic(p))),
ylab=expression(Observed~~-log[10](italic(p))),
xlim=c(0,max(e)), ylim=c(0,max(o)))
lines(e,e,col="red")
}
}
pvals <- as.matrix(runif(10000), 1000, 10);
ggd.qqplot(pvals[,9]+1e-20);
ggd.qqplot(pvals[,8]+1e-20, "green");