2013-02-25 74 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