我使用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()
}
}
答案 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))))