R dev.copy2pdf не хватает времени для запуска цикла for - PullRequest
0 голосов
/ 04 июня 2018

Я создаю несколько тепловых карт, используя forloop, и на каждой итерации я хочу создать PDF, используя dev.copy2pdf.Когда я отказываюсь от цикла for и просто копирую и вставляю каждую итерацию за другой, тогда код работает просто отлично (каждая тепловая карта составляет около 600 КБ. Но если я использую цикл for, я получаю пустые pdfs.

Iдумаю, это потому, что цикл 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 голосов
/ 06 июня 2018

С 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))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...