2013-02-25 19 views
5

Czy można używać rpy2 (wywołując ggplot2) z notebookami IPython, a następnie zapisywać je (i udostępniać w programie NBViewer, podobnie jak inne notebooki http://nbviewer.ipython.org/)? Czy istnieje jakiekolwiek wyzwanie związane z pojawieniem się gpplots rpy2 w notatniku i/lub interaktywnie? Byłoby pomocne, gdyby ktoś mógł podać przykładową sesję i jej wynik tworzenia postaci ggplot2 w notatniku za pomocą rpy2 w IPython.przy użyciu programu rpy2 z notebookami IPython?

Odpowiedz

1

Jest to możliwe z rozszerzeniem rmagic, które używa rpy2. Wygląda jednak na to, że potrzebujesz print() rysunku, żeby to pokazać. Oto przykładowa sesja: http://nbviewer.ipython.org/5029692

Jeśli wolisz używać rpy2 bezpośrednio, musi to być możliwe. Spójrz na rpy2 documentation for ggplot2. Aby go wprowadzić do notebooka, możesz narysować na urządzeniu PNG/SVG, a następnie odczytać je ze strony Pythona (tak robi rmagic).

+0

Nie chcę używać 'rmagic' Chcę korzystać bezpośrednio rpy2, ale nie widzę przykład notebooka z rpy2 na stronie jesteś połączony z dokumentami ... nie wiesz, jak narysować urządzenie, a następnie ponownie je przeczytać? Czy to nie jest zautomatyzowane? – user248237dfsf

+2

rmagic automatyzuje używanie urządzenia png i odczytywanie wyników. Jeśli wolisz używać rpy2 bezpośrednio, musisz to zrobić sam. Możesz spojrzeć na [kod źródłowy dla rmagic] (https://github.com/ipython/ipython/blob/master/IPython/extensions/rmagic.py). –

+0

To brzmi jak ważna niewiarygodna ... nie warta tego, ale oznacza to, że notebooki ipython są w zasadzie nieprzydatne dla osób używających ggplot/rpy2 zamiast matplotlib – user248237dfsf

3

To zostało napisane bez szukania kodu w rmagic. Mają bardziej sprytny sposób to zrobić (mam 11 linii kodu).

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) 

Aby spróbować go:

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

ten kod jest pierwszym razem, kiedy mogłem załadować i używać datasetsfrom rpy2. Zestawy danych z tej strony nie działały: http: //rpy.sourceforge.net/rpy2/doc-2.2/html/graphics.html#package-ggplot2 – zach

+0

@zach: R zmienił sposób, w jaki wewnętrznie zajmuje się zestawami danych, oraz rpy2 został dostosowany do tych zmian (chociaż natychmiastowy wynik nie jest najbardziej przyjaznym interfejsem). Nie mogę wykluczyć, że były miejsca w dokumentacji, które nie zostały zaktualizowane, ale tutaj problem może polegać na tym, że patrzysz na dokumentację dla rpy2-2.2.x, podczas gdy prawdopodobnie używasz rpy2-2.3.x. W każdym razie najlepszą okazją do sprawdzenia czegoś jest zgłoszenie problemu (e-mail, strona projektu itp.). – lgautier

+0

Dzięki. Czasami trudno jest nawet wiedzieć, jaki jest problem ..... Ale lepiej zrobię raportowanie. Dzięki za twoją wspaniałą pracę. – zach

Powiązane problemy