R写入函数,第一次调用plot(),后续调用调用points()

时间:2014-10-06 18:12:17

标签: r plot points

我想知道是否可以将此行为封装在单个函数中。基本上,我有以下代码,用于从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");

0 个答案:

没有答案