【问题标题】:Open graphics device within sourced script?在源脚本中打开图形设备?
【发布时间】:2013-05-05 23:20:24
【问题描述】:

我正在使用 R,并且我在一个主脚本中采购另一个脚本。在源脚本中,我的代码如下所示:

pdf("Figs/bar_gni.pdf")
m1table$Country1 <- reorder(m1table$Country, m1table$GNIpc2005)
ggplot(m1table, aes(y=GNIpc2005, fill=Level)) + 
  geom_bar(aes(x=Country1), data=m1table, stat="identity") +
  coord_flip() +
  ggtitle("GNI Per Capita, 2005") +
  xlab("Country") +
  ylab("GNI per capita, Atlas method (current US$)")
dev.off()

如果我是正确的,重要的部分是我正在打开一个 pdf 图形设备,制作一个绘图,然后关闭该设备。

当我运行源脚本本身(通过打开脚本)时,一切正常。但是,当我获取它时,我的图表都没有输出。它似乎创建了文件,但它只是创建了空白文件。

任何反馈都将不胜感激。

【问题讨论】:

    标签: r graphics output


    【解决方案1】:

    ggplot 图形仅在打印其对象时才绘制。

    在命令行上,当您输入时会发生这种情况。就像输入 sqrt(2) 会打印答案一样,因为命令行会自动调用 print,执行 ggplot(.)+geom_line(.) 会调用 print,这就是情节。

    在脚本中,结果不会自动打印。

    所以用print(ggplot(whatever)) 包装你所有的ggplot 调用。

    这是一个 R 常见问题解答。 http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f

    【讨论】:

    • 啊,不知道格子图形是什么,所以我忽略了这一点。让我试试看。
    • 从好的方面来说,这意味着您可以将绘图存储在对象中 (foo=ggplot(...)),然后稍后执行 print(foo) 以显示它们。在您的情况下,源脚本可以是一个函数,该函数返回主脚本可以在某个时间绘制的可绘制对象。
    • 我认为这是个好主意,您的建议奏效了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2012-07-17
    • 2013-09-05
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多