【问题标题】:problem saving pdf file in R with ggplot2使用ggplot2在R中保存pdf文件的问题
【发布时间】:2011-04-11 17:57:10
【问题描述】:

我遇到了一个奇怪的问题。我可以使用 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)  

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

【问题讨论】:

    标签: macos r ggplot2


    【解决方案1】:

    问题是你没有用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")
    

    但不要将两者混为一谈。

    【讨论】:

    • @Thierry 我提供的原始代码没有任何问题 - 您不需要 需要将先前绘制的对象保存为ggsave() 有一个参数 plot 的默认值,last_plot() 的结果。因此,我回滚了您的编辑。
    【解决方案2】:

    它在 R 常见问题解答中,你需要一个 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()。加文的回答还有更多。

    【讨论】:

    • 将调用放入函数或获取脚本时需要 print()。
    • 感谢您回答德克! Stackoverflow 是工作中真正的救星。您提到的 R 常见问题解答的 URL 是什么?
    • @wespiserA 我想包含一个 LMGTFY 链接,但不允许我这样做,所以实际链接就足够了 ;-) cran.r-project.org/doc/FAQ/R-FAQ.html
    • 哈哈,谢谢 Gavin,除了实际编码和阅读文档之外,SO 为我完成了所有工作。
    • @Gavin Simpson,你应该阅读这个 b4 极度推荐谷歌,meta.stackexchange.com/questions/8724/…
    【解决方案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】:

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

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

      【讨论】:

      • 原来的问题已经是用自定义名称(即pdfFile中的值)保存绘图。这并不能回答给定的问题。
      • 是的,但它是原始帖子中的额外代码行并且没有必要。问题是如何查看绘图并将其保存为 PDF。原始代码不起作用,因为没有使用 dev.off()。正如 Gavin 提到的,ggsave 绕过了使用 dev.off() 的需要。加文的回答不清楚的是如何将文件名保留为情节名称以外的其他内容。 ggsave also 避免了像原始帖子那样在单独的行上指定文件名的需要。所以,我认为这个答案确实回答了这个问题。调用“a”在 R 中显示绘图,并且 ggsave 生成​​带有所需文件名的 PDF
      猜你喜欢
      • 2019-08-19
      • 2012-10-18
      • 1970-01-01
      • 2011-04-15
      • 2017-01-11
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多