在IPython笔记本中使用rpy2?

5 投票
2 回答
2084 浏览
提问于 2025-04-17 17:00

可以在IPython笔记本中使用rpy2(调用ggplot2),然后保存这些笔记本(像其他笔记本一样在NBViewer上分享 http://nbviewer.ipython.org/)吗?在笔记本中显示rpy2的ggplot图表或者进行交互时会遇到什么挑战吗?如果有人能提供一个示例会话以及在IPython中使用rpy2制作ggplot2图形的输出,那就太好了。

2 个回答

1

你可以使用 rmagic 这个扩展,它是基于 rpy2 的。不过,你似乎需要用 print() 来显示图形。这里有一个示例会话:http://nbviewer.ipython.org/5029692

如果你更喜欢直接使用 rpy2,那也是可以的。你可以看看 rpy2 的 ggplot2 文档。要把图形放到笔记本里,你可以先画成 PNG 或 SVG 格式,然后从 Python 这边读取(这就是 rmagic 的作用)。

4

这段话是说,作者在没有查看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)

撰写回答