簡體   English   中英

R循環打印多個圖到多個文件

[英]R Print multiple plots to multiple files in loop

我已經在這個問題上工作了2天了。

我試圖在頁面上獲取6個圖並循環打印到文件中...

我對弄清楚如何循環是相當陌生的...我嘗試了多種安排,但是每次我走得很近但還不盡然。 我正在按參數(DO,PH,NH4等...)和6個時間段(6月至7月)生成圖。 因此,有6個圖繪制到每個參數的頁面上(共26個)。 我可以成功地將6個地塊上移到頁面上,然后手動保存到文件中...但是,這需要大量的手動保存,因此我將處理一個類似但規模較大的項目。

到目前為止,我已經獲得了將每個圖成功打印到文件的代碼,但是沒有將6個圖成功打印到文件的頁面的代碼。 我得到的最好的結果是,它創建一個文件,然后循環遍歷並覆蓋每個頁面,這樣我便有了一個標記為Chla的頁面,其中繪制了6個時間段的水溫。

這是我的代碼。...我覺得我已經可以解決它了。

alls<-subset( all,all$Layer=="S ")

x <- levels( alls$Parameter)
a <- levels( alls$period)

for( h in 1:length(x)){
   png( paste( x[h], "_plot", ".jpeg", sep = ""), width = 1000, height = 800)

   par( mfrow=c( 2,3),mar=c( 1.5,.5,.5,1),oma=c( 1,1,1,1),mgp=c( 1.5, .5, 0),cex = 1.3)

for( i in 1:length( x ) ){
         y <- alls[ alls$Parameter == x[ i ],]

for( j in 1:length( a ) ){
         b <- y[ y$period == a[ j ],]

plot( b$mean~b$YEAR,main = paste( x[ i ], "_RET_",a[ j ],"_Surface" ),cex.main=.6,subset=b$Station=="RET1.1",pch='.',  xlab="",ylab="",xlim=c( 1985,2015),ylim=c( min( b$mean ),max( b$mean ) ),cex.axis=.6)
 lines( b$mean~b$YEAR,subset= b$Station=="RET1.1",col="black")
 lines( b$mean~b$YEAR,subset= b$Station=="RET2.1",col="blue")
 lines( b$mean~b$YEAR,subset= b$Station=="RET1.1",col="red")
 lines( b$mean~b$YEAR,subset= b$Station=="RET2.1",col="red")
 lines( b$mean~b$YEAR,subset= b$Station=="RET2.2",col="green")
 lines( b$mean~b$YEAR,subset= b$Station=="RET2.4",col="orange")
 lines( b$mean~b$YEAR,subset= b$Station=="RET3.1",col="purple")
 lines( b$mean~b$YEAR,subset= b$Station=="RET3.2",col="pink")
 lines( b$mean~b$YEAR,subset= b$Station=="RET4.1",col="dark green")
 lines( b$mean~b$YEAR,subset= b$Station=="RET4.2",col="light blue")
 lines( b$mean~b$YEAR,subset= b$Station=="RET4.3",col="dark blue")
 lines( b$mean~b$YEAR,subset= b$Station=="RET5.1A",col="violet")
 lines( b$mean~b$YEAR,subset= b$Station=="RET5.2",col="gray")

    }
         }
   dev.off()
             } 

這是萬事通。

     YEAR Layer Station     mean  period Parameter
121 1986    S   RET1.1 7.700000 Apr_May        DO
122 1987    S   RET1.1 7.700000 Apr_May        DO
123 1988    S   RET1.1 8.375000 Apr_May        DO
124 1989    S   RET1.1 8.275000 Apr_May        DO
125 1990    S   RET1.1 8.425000 Apr_May        DO
126 1991    S   RET1.1 7.125000 Apr_May        DO
127 1992    S   RET1.1 9.350000 Apr_May        DO
128 1993    S   RET1.1 8.225000 Apr_May        DO
129 1994    S   RET1.1 8.150000 Apr_May        DO
130 1995    S   RET1.1 8.233333 Apr_May        DO
131 1996    S   RET1.1 9.500000 Apr_May        DO
132 1997    S   RET1.1 9.050000 Apr_May        DO
133 1998    S   RET1.1 7.575000 Apr_May        DO
134 1999    S   RET1.1 8.675000 Apr_May        DO
135 2000    S   RET1.1 8.150000 Apr_May        DO
136 2001    S   RET1.1 7.625000 Apr_May        DO
137 2002    S   RET1.1 7.725000 Apr_May        DO
138 2003    S   RET1.1 7.600000 Apr_May        DO
139 2004    S   RET1.1 8.500000 Apr_May        DO
140 2005    S   RET1.1 8.425000 Apr_May        DO
114235 2006    S  RET5.1A 26.48333    all  TURB_NTU
114236 2007    S  RET5.1A 16.00833    all  TURB_NTU
114237 2008    S  RET5.1A 20.16923    all  TURB_NTU
114238 2009    S  RET5.1A 21.37250    all  TURB_NTU
114239 2015    S  RET5.1A 16.23333    all  TURB_NTU
114255 1993    S   RET5.2 53.81875    all  TURB_NTU
114256 1994    S   RET5.2 27.14000    all  TURB_NTU
114257 1995    S   RET5.2 40.60333    all  TURB_NTU
114258 1996    S   RET5.2 47.48333    all  TURB_NTU
114259 1999    S   RET5.2 23.46250    all  TURB_NTU
114260 2000    S   RET5.2 24.94545    all  TURB_NTU
114261 2001    S   RET5.2 27.58333    all  TURB_NTU
114262 2002    S   RET5.2 23.07500    all  TURB_NTU
114263 2003    S   RET5.2 41.76667    all  TURB_NTU
114264 2004    S   RET5.2 25.63636    all  TURB_NTU
114265 2005    S   RET5.2 35.23846    all  TURB_NTU
114266 2006    S   RET5.2 36.36364    all  TURB_NTU
114267 2007    S   RET5.2 25.62500    all  TURB_NTU
114268 2008    S   RET5.2 25.12500    all  TURB_NTU
114269 2009    S   RET5.2 27.37000    all  TURB_NTU

我抬起dput。...我這樣做對嗎?

dput(head(alls,20))
structure(list(YEAR = 1986:2005, Layer = structure(c(6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L), .Label = c("AP", "B ", "BP", "BS", "M ", "S ", "VH"), class = "factor"), 
    Station = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("RET1.1", 
    "RET2.1", "RET2.2", "RET2.4", "RET3.1", "RET3.2", "RET4.1", 
    "RET4.2", "RET4.3", "RET5.1A", "RET5.2"), class = "factor"), 
    mean = c(7.7, 7.7, 8.375, 8.275, 8.425, 7.125, 9.35, 8.225, 
    8.15, 8.233333333, 9.5, 9.05, 7.575, 8.675, 8.15, 7.625, 
    7.725, 7.6, 8.5, 8.425), period = structure(c(2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L), .Label = c("all", "Apr_May", "Aug_Sep", "feb_mar", 
    "Jun_Jul", "Oct_Nov"), class = "factor"), Parameter = structure(c(3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L), .Label = c("CHLA", "DIN", "DO", "DON", "DOP", 
    "NH4F", "NO23F", "NO2F", "NO3F", "PC", "PH", "PIP", "PN", 
    "PO4F", "PP", "SALINITY", "SIF", "SPCOND", "TDN", "TDP", 
    "TN", "TON", "TP", "TSS", "TURB_NTU", "WTEMP"), class = "factor")), .Names = c("YEAR", 
"Layer", "Station", "mean", "period", "Parameter"), row.names = 121:140, class = "data.frame")

我想我找到了你的問題,那是par的位置。 沒有足夠的數據來執行多個循環,但這應該可以實現您所期望的方式。

alls<-subset( all,all$Layer=="S ")

x <- levels( alls$Parameter)
a <- levels( alls$period)

# NOTE: You had an unnecessary loop here. The h loop.

 for( i in 1:length( x ) ){

png( paste( x[i], "_plot", ".jpeg", sep = ""), width = 1000, height = 800)

y <- alls[ alls$Parameter == x[ i ],]

# Par occurs right before plotting begins

par( mfrow=c( 2,3),mar=c( 1.5,.5,.5,1),oma=c( 1,1,1,1),mgp=c( 1.5, .5, 0),cex = 1.3)

 for( j in 1:length( a ) ){

  b <- y[ y$period == a[ j ],]

  plot( b$mean~b$YEAR,main = paste( x[ i ], "_RET_",a[ j ],"_Surface" ),cex.main=.6,subset=b$Station=="RET1.1",pch='.',  xlab="",ylab="",xlim=c( 1985,2015),ylim=c( min( b$mean ),max( b$mean ) ),cex.axis=.6)
  lines( b$mean~b$YEAR,subset= b$Station=="RET1.1",col="black")
  lines( b$mean~b$YEAR,subset= b$Station=="RET2.1",col="blue")
  lines( b$mean~b$YEAR,subset= b$Station=="RET1.1",col="red")
  lines( b$mean~b$YEAR,subset= b$Station=="RET2.1",col="red")
  lines( b$mean~b$YEAR,subset= b$Station=="RET2.2",col="green")
  lines( b$mean~b$YEAR,subset= b$Station=="RET2.4",col="orange")
  lines( b$mean~b$YEAR,subset= b$Station=="RET3.1",col="purple")
  lines( b$mean~b$YEAR,subset= b$Station=="RET3.2",col="pink")
  lines( b$mean~b$YEAR,subset= b$Station=="RET4.1",col="dark green")
  lines( b$mean~b$YEAR,subset= b$Station=="RET4.2",col="light blue")
  lines( b$mean~b$YEAR,subset= b$Station=="RET4.3",col="dark blue")
  lines( b$mean~b$YEAR,subset= b$Station=="RET5.1A",col="violet")
  lines( b$mean~b$YEAR,subset= b$Station=="RET5.2",col="gray")

}
  dev.off()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM