【问题标题】:R Print multiple plots to multiple files in loopR循环打印多个图到多个文件
【发布时间】:2016-01-20 16:35:09
【问题描述】:

我已经解决这个问题 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")

【问题讨论】:

  • 你能不能dput(alls),或者其中的一部分,以便我们重现你的错误。说到错误,你遇到了什么错误?
  • 实际上没有得到任何错误。
  • 头部和尾部可以用dput()包起来吗,它会生成结构,方便我们使用数据。您想要 1 页上的 6 个图还是 6 页和 1 个图? (如果后者看到?pdf,则需要将 jpeg 包装在 pdf 中。)
  • 好的...刚刚尝试了 dput 的事情...我做对了吗?我试图在一页上获得 6 个图,并在循环中为每个参数打印到一个文件中。到目前为止,我可以做任何一个或但不能两者兼而有之。我会弄乱pdf更多
  • 您的dput 是正确的,它没有提供足够的信息来复制您的问题。

标签: r loops plot


【解决方案1】:

我想我找到了您的问题,它是 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()
}

【讨论】:

  • 是的……那行得通。我知道我做错了一定是一些简单的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多