R dev.copy2pdf没有足够的时间在for循环中运行

时间:2018-06-04 04:23:00

标签: r for-loop pdf graph

我使用forloop生成几个热图,并且在每次迭代中我想使用dev.copy2pdf生成pdf。当我放弃for循环而只是复制并粘贴每个迭代之后,代码工作得很好(每个热图大约600kb。但是如果我使用for循环,我得到空的pdfs。

我认为这是因为for循环没有给dev.copy2pdf足够的时间来生成图形。或许这可能是由于其他原因......

这个问题的解决方案是什么?

这是我的代码:

    # specify where you want to deposit the pdf of the graphs
    graphpath = 

    attmeasures = c('c','d')
    for (inv in c('a','b')) {
       for (m in 1:length(attmeasures)) {

plot.new()

x11()


xvar<- seq(1,36,1)
yvar<- seq(1,12000,1)
intensityvar<-expand.grid(yrmth=xvar, cid=yvar)
intensityvar$intvar = sample(1:100,length(xvar)*length(yvar),replace=T)





graphtitle = paste0('heatmap', attmeasures[m], inv, sep='')

intensityvar_heat<- ggplot(intensityvar, aes(yrmth, cid, z= intvar)) + 
  geom_tile(aes(fill = intvar)) + theme_bw() +
  scale_fill_gradient2(low="yellow", mid="seagreen3", high="blue4", 
                       midpoint = 50,
                       guide="colourbar",na.value="white", name = paste("monthly ", attmeasures[m], sep=''))


intensityvar_heat + labs(x='date', y='id') +
  theme(plot.caption=element_text(size=8, hjust=0, margin=margin(t=15)))

dev.copy2pdf(file = paste(graphpath, graphtitle, ' ', 
                          ".pdf", sep=''), paper="a4r", width=10, height=10)

dev.off()

        }

    }

1 个答案:

答案 0 :(得分:0)

使用ggplot,你需要在你的情节周围调用print,即使是在使用dev.copy2pdf的情况下,我承认这有点违反直觉

print(intensityvar_heat + labs(x='date', y='id') +
      theme(plot.caption=element_text(size=8, hjust=0, margin=margin(t=15))))