2017-06-17 123 views
1

我正在研究一个需要20个不同条形图的项目。我发现我可以一个一个地绘制它们,但是如果出现类似的问题,我会在未来寻找一种更有效的方法来做到这一点。通过R中的迭代绘图

我已经尝试了循环的标准,但我的情节都是空的。

library(lattice) 
    par(mfrow = c(1,1)) 
    b_clr <- c("steelblue", "darkred") 


    for(i in 1:20){ 
     png(paste(i,'.png', sep = '')) 


    barchart(as.table(V[[i]]), 
     main = map$V1[i], 
     horizontal = FALSE, 
     col = ifelse(V[[i]] > 0, 
        b_clr[1], 
        b_clr[2]), 
     ylab = "Impact Value", 
     scales = list(x=list(relation = "free", 
          rot = 55, 
          labels = top.df[[i]], 
          cex = 1.1))) 
    dev.off() 
    } 

如果我把它从循环中移出,并将所有的i改为单个值,那么这些图很好地工作。但是,如果我将它们作为循环运行,则不会有任何重复。任何人都可以提供建议吗?

+0

你能不能提供一些数据,以反映? – akash87

+0

这实质上是一个请求,我们会阅读R-FAQ 7.22 https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f。尝试阅读FAQ的其余部分。 –

+0

谢谢。我不知道FAQ页面存在。这为我打开了一个非常赞赏的新资源。 – Nate

回答

1

你需要用你的条形图来调用使用print()这样的:

library(lattice) 
par(mfrow = c(1,1)) 
b_clr <- c("steelblue", "darkred") 

for(i in 1:3){ 

    png(paste(i,'test.png', sep = '')) 

    map <- iris[i * c(1, 2, 3),] 

    print(barchart(map$Petal.Length, 
      main = i, 
      horizontal = FALSE, 
      col = ifelse(map$Petal.Length > 0, 
         b_clr[1], 
         b_clr[2]), 
      ylab = "Impact Value")) 
    dev.off() 
} 
+0

谢谢你的帮助。我不知道print必须在函数或循环中被显式调用 – Nate

+0

你能解释为什么'print(plot)'工作,而'plot()'不?这显然有效......我只是不明白为什么。 – CPak

+1

@ChiPak我直接从上面提到的手册中获得这个:'xyplot()等格子函数创建一个图形对象,但不显示它...图形对象的print()方法产生实际的显示。 ' –