2013-02-25 101 views
5

是否可以在IPython笔记本电脑上使用rpy2(调用ggplot2),然后保存它们(并像其他笔记本电脑一样在其他笔记本电脑上共享http://nbviewer.ipython.org/)?将rpy2 ggplots显示在笔记本中和/或以交互方式是否有任何挑战?如果有人能够提供一个示例会话并在ipython中使用rpy2在笔记本中创建一个ggplot2图的输出将会很有帮助。使用rpy2与IPython笔记本?

回答

1

它可能与使用rpy2的rmagic扩展。虽然你似乎需要print()这个数字来显示它。以下是一个示例会话:http://nbviewer.ipython.org/5029692

如果您更愿意直接使用rpy2,则必须有可能。看看rpy2 documentation for ggplot2。要将它放入笔记本中,可以使用PNG/SVG设备,然后从Python端读取(这是rmagic的功能)。

+0

我不想用'rmagic'我想直接使用rpy2,但我没有看到笔记本的一个例子与rpy2在页面上你链接到从文档...不知道如何绘制到设备,然后再读回来?它不是自动的吗? – user248237dfsf 2013-02-25 15:47:31

+2

rmagic是使用png设备和读取输出的自动化工具。如果你更愿意直接使用rpy2,你必须自己去做。你可以看看[rmagic的源代码](https://github.com/ipython/ipython/blob/master/IPython/extensions/rmagic.py)。 – 2013-02-26 13:03:08

+0

这听起来像是一个重大的... ...不值得,但它意味着ipython笔记本基本上没有用于使用ggplot/rpy2而不是matplotlib的人 – user248237dfsf 2013-02-27 06:48:21

3

这是写在没有在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) 
+0

这段代码是我第一次加载和使用rpy2的数据集。此页面的数据集无效:http://rpy.sourceforge.net/rpy2/doc-2.2/html/graphics.html#package-ggplot2 – zach 2013-03-20 21:49:37

+0

@zach:R改变了它在内部处理数据集的方式,并且rpy2适应了这些变化(尽管直接结果不是最友好的界面)。我不能排除在文档中有些地方没有更新,但这里的问题可能是您正在查看rpy2-2.2.x的文档,而可能使用rpy2-2.3.x。无论如何,看到一些固定的最好机会是报告问题(电子邮件,项目页面等)。 – lgautier 2013-03-20 22:26:25

+0

谢谢。有时很难甚至知道问题是什么.....但我会更好地报告。感谢您的杰出工作。 – zach 2013-03-20 22:42:53