2017-02-27 22 views
0

我必須通過循環創建一些圖形。這些圖是多平面的,每個面板有三個不同的層。 我嘗試這個代碼循環時避免在`pdf`函數中疊加多個圖形

pdf('plot.pdf', width=14, height=7) 

R <- dim(dataset)[1] 

for (i in 1:R) { 

    par(mfrow=c(1,2)) 

    par(mfg=c(1,1)) 
    plot(...) 
    points(...) 
    polygon(...) 

    par(mfg=c(1,2) 
    plot(...) 
    points(...) 
    polygon(....) 

} 

dev.off() 

但結果是單一的圖(和每循環而不是一個曲線圖)完全覆蓋。

enter image description here

是否有與par功能循環的問題嗎?

編輯:這裏是一個可重複的例子。我試着用split.screen,但結果是相同的單頁pdf與重疊的情節。 這個問題似乎與pdf函數本身有關,因爲循環正確地執行了這項工作。

set.seed(123) 

## create data 
varA1 <- matrix(rnorm(60,5,1), nrow=3) 
varA2 <- matrix(rnorm(60,5,1), nrow=3) 
varB1 <- matrix(rnorm(80,20,10), nrow=4) 
varB2 <- matrix(rnorm(80,30,20), nrow=4) 
sitesA <- 1:nrow(varA1) 
sitesB <- 1:nrow(varB1) 
totsites <- 1:max(sitesA, sitesB) 

## create pdf 
pdf('prova.pdf', width=14, height=7) 

for(i in totsites) { # the pdf should contain "totsites" number of pages (in this case, 4) 
split.screen(c(1,2)) 
if(i %in% sitesA) { 
    screen(1) 
    plot(var1[i,], ylim=c(0, max(c(var1, var2))), col='darkred', type='b', pch=16) 
    points(var2[i,], col='red', type='b', pch=16) 
    polygon(c(1:20,rev(1:20)),c(var1[i,]-1,rev(var1[i,]+1)), col=rgb(100, 0, 0, maxColorValue=255, alpha=50), border=NA) 
} 
if(i %in% sitesB) { 
    screen(2) 
    plot(var3[i,], ylim=c(0, max(c(var3, var4))), col='darkgreen', type='b', pch=16) 
    points(var4[i,], col='green', type='b', pch=16) 
    polygon(c(1:20,rev(1:20)),c(var3[i,]-10,rev(var3[i,]+10)), col=rgb(0, 100, 0, maxColorValue=255, alpha=50), border=NA) 
    } 
} 
dev.off() 

順便說一句,我得到這個警告

Warning message: 
In par(new = TRUE) : calling par(new=TRUE) with no plot 
+0

你應該真的提供一個最小的[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。目前還不清楚你在代碼中的'...'是做什麼的。你期待一個帶有「R」不同頁面的PDF? – MrFlick

+0

謝謝@MrFlick,我用一個可重現的例子編輯了這篇文章。是的,我想要一個pdf與'R'不同的頁面 – Quechua

回答

0

使用layout()而不是split.screen()似乎是一個更好的選擇。也保持它在循環之外。

pdf('prova.pdf', width=14, height=7) 
layout(matrix(1:2, nrow=1)) 
for(i in totsites) { # the pdf should contain "totsites" number of pages (in this case, 4) 

if(i %in% sitesA) { 
    plot(varA1[i,], ylim=c(0, max(c(varA1, varA2))), col='darkred', type='b', pch=16) 
    points(varA2[i,], col='red', type='b', pch=16) 
    polygon(c(1:20,rev(1:20)),c(varA1[i,]-1,rev(varA1[i,]+1)), col=rgb(100, 0, 0, maxColorValue=255, alpha=50), border=NA) 
} else { 
    plot.new() 
} 
if(i %in% sitesB) { 
    plot(varB1[i,], ylim=c(0, max(c(varB1, varB2))), col='darkgreen', type='b', pch=16) 
    points(varB2[i,], col='green', type='b', pch=16) 
    polygon(c(1:20,rev(1:20)),c(varB1[i,]-10,rev(varB1[i,]+10)), col=rgb(0, 100, 0, maxColorValue=255, alpha=50), border=NA) 
    } else { 
    plot.new() 
    } 
} 
dev.off() 
+0

它的作品,謝謝! – Quechua