2015-05-27 2 views
0

У меня странное явление при хранении нескольких графиков ggplot2 в формате pdf. При хранении с ggsave я получаю B_ggplot.pdf ОК, но A_ggplot.pdf не закрывает файл (он кажется заблокированным). Старый метод иногда создает пустую страницу. Кажется, есть условия гонки, но я не могу на нее наложить.Множество сюжетов с ggplot2: незакрывающие файлы и пустые страницы

Может ли кто-нибудь помочь мне понять это?

Вот код:

library(ggplot2) 

# plot A 
figureA <- ggplot(data=mtcars, aes(x=cyl, y=hp)) + geom_point() 
# plot B 
figureB <- ggplot(data=mtcars, aes(x=wt, y=carb)) + geom_point() 

# store PDFs using ggplot2 
ggsave(file="D:/A_ggplot.pdf") # OK 
ggsave(file="D:/B_ggplot.pdf") # PDF with empty page 

# store PDFs the old way 
pdf(file="D:/A.pdf") # OK 
print(figureA) 
dev.off() 
pdf(file="D:/B.pdf") # hangs and when closing RStudio, writes file 
print(figureB) 
dev.off() 
+0

Вы пытались закрыть все графические устройства, выполнив 'dev.off()' до тех пор, пока не получите ошибку? – Roland

+0

Thats, похоже, делает это, writ к проблеме закрытия файла. Тем не менее, у меня все еще есть пустая страница PDF для A_ggplot.pdf ...? – RalfB

+0

Я пробовал свой код и обошел вашу проблему с помощью 'ggsave (file =" D: /A_ggplot.pdf ", plot = figureA)' и 'ggsave (file =" D: /B_ggplot.pdf ", plot = figureB)' , –

ответ

2

Следующие работы для меня. После каждого участка вам необходимо позвонить ggsave. Из документации вы увидите, что ggplot использует last_plot(). Я не в Windows, поэтому я изменил пути. В любом случае:

library(ggplot2) 

# plot A 
figureA <- ggplot(data=mtcars, aes(x=cyl, y=hp)) + geom_point() 
ggsave(file="~/A_ggplot.pdf") 

# plot B 
figureB <- ggplot(data=mtcars, aes(x=wt, y=carb)) + geom_point() 
ggsave(file="~/B_ggplot.pdf") 

В противном случае вам необходимо указать его, например. с:

ggsave(file="~/B_ggplot.pdf", plot = figureB) 

старый путь без проблем работает для меня:

pdf(file="~/A.pdf") # OK 
print(figureA) 
dev.off() 

pdf(file="~/B.pdf") # OK 
print(figureB) 
dev.off() 

Просьба sessionInfo(). Обязательно обновите свои пакеты. Обязательно запустите код в новом сеансе R.

+1

Да, это и было. Немного подробностей, которые я не рассматривал. Благодаря! – RalfB

Смежные вопросы