【问题标题】:using rpy2 with IPython notebooks?将 rpy2 与 IPython 笔记本一起使用?
【发布时间】:2013-02-10 05:38:02
【问题描述】:

是否可以将 rpy2(调用 ggplot2)与 IPython 笔记本一起使用,然后保存它们(并像其他笔记本一样在 NBViewer 上共享 http://nbviewer.ipython.org/)?让 rpy2 ggplots 出现在笔记本中和/或以交互方式出现有什么挑战吗?如果有人可以提供一个示例会话及其在 IPython 中使用 rpy2 在笔记本中制作 ggplot2 图形的输出,将会很有帮助。

【问题讨论】:

    标签: python ggplot2 ipython rpy2


    【解决方案1】:

    使用 rpy2 的 rmagic 扩展是可能的。不过,您似乎需要print() 来显示它。这是一个示例会话:http://nbviewer.ipython.org/5029692

    如果你更喜欢直接使用rpy2,那一定是可以的。看看rpy2 documentation for ggplot2。要将其放入笔记本中,您可以绘制到 PNG/SVG 设备,然后从 Python 端读取它(这就是 rmagic 所做的)。

    【讨论】:

    • 我不想使用 rmagic 我想直接使用 rpy2,但是在您从文档链接到的页面上,我没有看到带有 rpy2 的笔记本示例...不知道如何绘制到设备然后再读回它?不是自动化的吗?
    • rmagic 使用 png 设备自动读取输出。如果你更喜欢直接使用 rpy2,你必须自己做。你可以看看the source code for rmagic
    • 这听起来像是一个重大的失败......不值得,但这意味着 ipython 笔记本对于使用 ggplot/rpy2 而不是 matplotlib 的人基本上没有用
    • 这不是一项特别复杂的工作——可能需要不到 10 行额外的代码。同样,它已经作为 rmagic 的一部分编写,它只是 rpy2 的包装器。
    【解决方案2】:

    这是在没有查看 rmagic 代码的情况下编写的。 他们有更聪明的方法(我有 11 行代码)。

    import uuid
    from rpy2.robjects.packages import importr 
    from IPython.core.display import Image
    
    grdevices = importr('grDevices')
    def ggplot_notebook(gg, width = 800, height = 600):
        fn = '{uuid}.png'.format(uuid = uuid.uuid4())
        grdevices.png(fn, width = width, height = height)
        gg.plot()
        grdevices.dev_off()
        return Image(filename=fn)
    

    尝试一下:

    from rpy2.robjects.lib import ggplot2
    from rpy2.robjects import Formula
    datasets = importr('datasets')
    mtcars = datasets.__rdata__.fetch('mtcars')['mtcars']
    p = ggplot2.ggplot(mtcars) + \
        ggplot2.aes_string(x='mpg', y='cyl') + \
        ggplot2.geom_point() + \
        ggplot2.geom_smooth() + \
        ggplot2.facet_wrap(Formula('~ am'))
    
    ggplot_notebook(p, height=300)
    

    【讨论】:

    • 这段代码是我第一次能够从 rpy2 加载和使用数据集。此页面的数据集不起作用:rpy.sourceforge.net/rpy2/doc-2.2/html/…
    • @zach:R 改变了它在内部处理数据集的方式,并且 rpy2 适应了这些变化(尽管直接结果不是最友好的界面)。我不能排除文档中有一些地方没有更新,但这里的问题可能是您正在查看 rpy2-2.2.x 的文档,而可能正在使用 rpy2-2.3.x。在任何情况下,看到已修复问题的最佳机会是报告问题(电子邮件、项目页面等...)。
    • 谢谢。有时甚至很难知道问题出在哪里......但我会更好地报告。感谢您的出色工作。
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多