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,而不是在全部完成之後調用。