2014-09-12 50 views
-1

我知道大多数程序员会将我引用到R的'LATTICE'或'ggplot2'包作为解决此问题的方法,但必须有方式与基本包做。我想用简单循环绘制具有相应回归线和相关系数的多个图。一个简单的例子的数据可以看喜欢 -多元散点图与相应的回归线(&公式)使用R中的回路

a=list(cbind(c(1,2,3), c(4,8,12)), cbind(c(5,15,25), c(10,30,50))) 
par(mfrow=c(1,2)) 
lapply(1:length(a), function(i) 
    plot(a[[i]][,1], a[[i]][,2])) 
lapply(1:length(a), function(i) 
    abline(lm(a[[i]][,2]~a[[i]][,1]))) 
require(plotrix) 
lapply(1:length(a), function(i) 
    boxed.labels(a[[i]][,1][1], a[[i]][,2][3], 
       labels=paste(round(cor(a[[i]][,2], a[[i]][,1], use = "pairwise.complete.obs"),2)), 
       border=FALSE, adj=0.5, cex=0.8)) 

如果你运行你会发现,所有的线性线和R值将绘制的最后一个图的顶部上面的脚本。有没有什么方法可以和剧情指令一起写回归回归?或者任何其他聪明的方式来处理循环来绘制相应数字的回归?它适用于单个情节(如下所示),但我正在处理一个相当大的列表!

plot(a[[1]][,1], a[[1]][,2]) 
abline(lm(a[[1]][,2]~a[[1]][,1])) 
boxed.labels(a[[1]][,1][1], a[[1]][,2][3], 
      labels=paste(round(cor(a[[1]][,2], a[[1]][,1], use = "pairwise.complete.obs"),2)), 
          border=FALSE, adj=0.5, cex=0.8) 
+0

有多种方法来组合图。看到这篇文章解释其中的一些:http://www.statmethods.net/advgraphs/layout.html – speendo 2014-09-12 20:07:19

回答

1

一旦你打电话给plot(),你开始绘制一个新的“单元格”。所以,如果你想在移动到下一个前添加更多的情节,你一定要做所有绘图的呼叫下plot()

例如

a=list(cbind(c(1,2,3), c(4,8,12)), cbind(c(5,15,25), c(10,30,50))) 
par(mfrow=c(1,2)) 
lapply(a, function(d) { 
    d <- setNames(data.frame(d), c("x","y")) 
    plot(y~x, d) 
    abline(lm(y ~ x, d)) 
    boxed.labels(min(d$x), max(d$y), 
    labels=paste(round(cor(d$y, d$x, use = "pairwise.complete.obs"),2)), 
    border=FALSE, adj=0.5, cex=0.8) 
}) 

注意之前,我们是如何做的所有在一个单独的lapply()中画图,以便在多个图表调用之间调用ablineboxed.labels,而不是在全部完成之后调用。