【问题标题】:How to use lattice in Rpy2 and save result to pdf?如何在 Rpy2 中使用 lattice 并将结果保存为 pdf?
【发布时间】:2013-02-17 06:42:05
【问题描述】:

我正在关注 rpy2 的文档 (http://rpy.sourceforge.net/rpy2/doc-2.1/html/graphics.html?highlight=lattice)。我可以使用 rpy2 中的lattice 成功地进行交互式绘图,例如:

iris = r('iris')
p = lattice.xyplot(Formula("Petal.Length ~ Petal.Width"),
                   data=iris)
rprint = robj.globalenv.get("print")
rprint(p)

rprint 显示图形。但是,当我尝试通过首先将图形保存为 pdf 时:

r.pdf("myfile.pdf")

然后我的lattice 调用,它不起作用,而是导致一个空的pdf。如果我用ggplot2 或R 基础做同样的事情(调用r.pdf,然后绘图),那么我会得到一个工作pdf。 lattice 是否需要 Rpy2 中的任何特殊内容才能将结果保存到 PDF 文件?以下也不起作用:

iris = r('iris')
r.pdf("myfile.pdf")
grdevices = importr('grDevices')
p = lattice.xyplot(Formula("Petal.Length ~ Petal.Width"),
                   data=iris)
rprint = robj.globalenv.get("print")
rprint(p)
grdevices.dev_off()

谢谢。

【问题讨论】:

    标签: python r lattice rpy2


    【解决方案1】:

    在 print 命令之后你需要一些等价的dev.off()

    也就是说,为了将你的图表保存为pdf,大致的大纲是:

    pdf(...)
    print(....)
    dev.off()
    

    未能调用dev.off() 将导致一个空的pdf 文件。


    来自this source,看来rpy2 中的等价物可能是

    grdevices.dev_off()
    

    【讨论】:

    • 谢谢,我试过了(见编辑),但它仍然产生一个空的情节
    • @user248237,还是不行吗? (如果是这样,也许删除复选标记)。如果仍然有问题,请尝试以下操作:在您调用 grdevices.dev_off() 的位置,而不是调用一次,而是重复调用 2 或 3 次。
    【解决方案2】:

    解决方法是使用:

    robjects.r["dev.off"]()
    

    由于某种原因,其他变体无法解决问题。

    【讨论】:

    • rpy2 中的 grdevices.dev_off() 严格等价于grDevices::dev.off(),如果不是名为dev.off 的用户定义函数存在于R 的全局环境中,则其本身等价于robjects.r["dev.off"]()。您可能需要检查进行测试时使用的工作环境和代码。
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多