使用ggplot2在R中保存pdf文件时出现问题

发布于 2024-10-31 18:36:55 字数 415 浏览 2 评论 0原文

我遇到了一个奇怪的问题。我可以使用 R/ggplot2 创建和保存 pdf 文件,并在 R 控制台运行时查看它们。一旦我退出 R 控制台,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)  

有没有人遇到过类似的问题?如果是这样,我需要做什么来修复它? 非常感谢您抽出时间。

I am encountering an odd problem. I am able to create and save pdf file using R/ggplot2 and view them while the R Console is running. As soon as I exit the R console, Preview on Mac OS X will no longer display the PDF. I have been able to save .png files w/o problem, but for reasons beyond my control, I need to save in pdf files. The code I am using to save is as follows:

  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)  

Has anyone encountered a similar problem? If so, what do I need to do to fix it?
Thank you very much for your time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

維他命╮ 2024-11-07 18:36:55

问题是您没有使用 dev.off() 关闭 pdf() 设备,

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")

但不要混合两者。

The problem is that you don't close the pdf() device with 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()

That works, as does:

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

But don't mix the two.

流绪微梦 2024-11-07 18:36:55

在 R FAQ 中,您需要在调用 ggplot() 时使用 print() ——并且需要使用 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()< /code> 不是必需的。加文的回答还有更多。

It is in the R FAQ, you need a print() around your call to ggplot() -- and you need to close the plotting device with dev.off() as well, ie try

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()

Edit: I was half-right on the dev.off(), apparently the print() isn;t needed. Gavin's answer has more.

泛滥成性 2024-11-07 18:36:55

下面的图

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()  

使用的修复它的方法

print(p) 

将产生一个损坏的 pdf 文件以及我们在函数中

。在控制台中。 “p”会自动打印,但不会在函数中或在您获取文件时打印。

The following plot

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

works in the console but not in a function or when you source this from a file.

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()  

Will produce a corrupt pdf file and the way to fix it us use

print(p) 

within a function.

In a console. "p" is automatically printed but not in a function or when you source the file.

英雄似剑 2024-11-07 18:36:55

如果您想将其命名为“ggplot1”或您选择的任何简洁对象名称之外的名称,您还可以在 ggsave 中更改 pdf 图的文件名;只需先给出文件名,然后告诉它您所指的是哪个图,例如:

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

You can also change the filename of your pdf plot within ggsave if you want to call it something other than "ggplot1" or whatever concise object name you chose; just give the filename first and then tell it which plot you're referring to, for example:

a <- ggplot(dat, aes(x = A, y = B)) + geom_point()
ggsave("Structure.pdf",plot=a)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文