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
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).
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)
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
@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
Dzięki. Czasami trudno jest nawet wiedzieć, jaki jest problem ..... Ale lepiej zrobię raportowanie. Dzięki za twoją wspaniałą pracę. – zach
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
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). –
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