Проблема сохранения файла PDF в R с помощью ggplot2

Я столкнулся с нечетной проблемой. Я могу создать и сохранить pdf файл с помощью R/ggplot2 и просмотреть их, пока работает R-консоль. Как только я выйду из консоли R, Preview на Mac OS X больше не будет отображать PDF файл. Я смог сохранить .png файлы без проблем, но по причинам, не зависящим от моего контроля, мне нужно сохранить файлы в формате pdf. Код, который я использую для сохранения, выглядит следующим образом:

  pdfFile <-c("/Users/adam/mock/dir/structure.pdf")
  pdf(pdfFile)
  ggplot(y=count,data=allCombined, aes(x=sequenceName, fill=factor(subClass))) + geom_bar()
  ggsave(pdfFile)  

Кто-нибудь сталкивался с подобной проблемой? Если да, что мне нужно сделать, чтобы исправить это? Большое вам спасибо за ваше время.

Ответ 1

Проблема заключается в том, что вы не закрываете устройство pdf() с помощью dev.off()

dat <- data.frame(A = 1:10, B = runif(10))
require(ggplot2)

pdf("ggplot1.pdf")
ggplot(dat, aes(x = A, y = B)) + geom_point()
dev.off()

Это работает, как и:

ggplot(dat, aes(x = A, y = B)) + geom_point()
ggsave("ggplot1.pdf")

Но не смешивайте их.

Ответ 2

В разделе "Часто задаваемые вопросы" вам нужно print() вокруг вашего вызова ggplot() - и вам также нужно закрыть устройство построения с помощью dev.off(), т.е. попробовать

pdfFile <-c("/Users/adam/mock/dir/structure.pdf")
pdf(pdfFile)
ggplot(y=count,data=allCombined,aes(x=sequenceName,fill=factor(subClass)))
      + geom_bar()
dev.off()

Изменить: я был на половину справа на dev.off(), видимо, print() isn; t. Ответ Гэвина больше.

Ответ 3

Следующий график

pdf("test.pdf")  
p <- qplot(hp, mpg, data=mtcars, color=am,   
         xlab="Horsepower", ylab="Miles per Gallon", geom="point")   
p  
dev.off()

работает в консоли, но не в функции или когда вы отправляете это из файла.

myfunc <- function() {  
  p <- qplot(hp, mpg, data=mtcars, color=am,   
           xlab="Horsepower", ylab="Miles per Gallon", geom="point")  
  p 
}  
pdf("test.pdf")  
myfunc()  
dev.off()  

Создаст поврежденный pdf файл и способ исправить его.

print(p) 

внутри функции.

В консоли. "p" автоматически печатается, но не в функции или при исходном файле.

Ответ 4

Вы также можете изменить имя файла вашего pdf-графика в ggsave, если хотите называть его чем-то иным, чем "ggplot1" или любым кратким именем объекта, которое вы выбрали; просто сначала укажите имя файла, а затем скажите, на какой сюжет вы ссылаетесь, например:

a <- ggplot(dat, aes(x = A, y = B)) + geom_point()
ggsave("Structure.pdf",plot=a)