2017-07-28 56 views
0

我有以下代碼來創建一個簡單的拆分y軸圖。我想循環(作爲例子)edhec數據集,使面板矩陣中的每個面板有兩行:edhec的第一個向量在左邊,隨後的向量之一在右邊:通過迴路R的多個雙y軸圖

library(zoo) 
library(PerformanceAnalytics) 

data(edhec) 
edhec <- as.zoo(edhec) 
plot(edhec[ ,1], ylab=colnames(edhec[ ,1]), lwd=2) 
par(new=TRUE) 
plot(edhec[ ,2], ann=FALSE, yaxt="n", col="darkgreen", lwd=1) 
axis(side=4) 

感謝您的幫助!

+0

你在努力去你的渴望嘗試什麼樣的循環呢?此外,循環可能不是實現預期結果的最佳方式,但是如果我們可以看到您嘗試過的內容,則可以更容易地收集您的意圖。 – Badger

+0

擺脫'par(new = TRUE)'並使用任何標準方法將基本圖組合在一起:'par(mfrow)'或'par(mfcol)'或'layout'或'split.screen' (他們都有幫助頁面)。 – Gregor

+0

因爲我的大腦被困在VBA中,所以我使用「looping」這個詞,但是lapply的變體也是理想的。用於創建圖的矩陣的代碼是這樣的。我真的不知道如何將這兩者結合起來,還是這是正確的方式。 – Lymacro

回答

1

我猜這大致是你想要的?

library(zoo) 
library(PerformanceAnalytics) 

data(edhec) 
edhec <- as.zoo(edhec) 

par(mfrow=c(ceiling(ncol(edhec)/2), 2), 
    mar=c(0, 2, 0, 2), oma=c(2, 0, 1, 0), mgp=c(2, 0.7, 0)) 

invisible(lapply(1:ncol(edhec), 
    function(x) { 
     par(new=FALSE) 
     plot(edhec[, x], 
     xaxt=ifelse(x >= ncol(edhec) - 1, "s", "n"), 
     ylab="") 
     par(new=TRUE) 
     plot(edhec[, x + 1], col="darkgreen", ann=FALSE, xaxt="n", yaxt="n") 
     axis(side=4) 
    } 
)) 

enter image description here

+0

是的。太好了,謝謝。一切都很清楚。 – Lymacro