2013-02-25 19 views
5

È possibile utilizzare rpy2 (chiamando ggplot2) con i taccuini IPython e quindi salvarli (e condividerli su NBViewer come gli altri portatili http://nbviewer.ipython.org/)? C'è qualche difficoltà nel far apparire i ggplot rpy2 nel notebook e/o in modo interattivo? Sarebbe utile se qualcuno potesse fornire una sessione di esempio e il suo output di creare una figura ggplot2 all'interno di un notebook usando rpy2 in IPython.utilizzando rpy2 con i notebook IPython?

risposta

1

È possibile con l'estensione rmagic, che utilizza rpy2. Sembra che tu abbia bisogno della cifra print() per mostrarla, comunque. Ecco una sessione di esempio: http://nbviewer.ipython.org/5029692

Se si preferisce utilizzare direttamente rpy2, deve essere possibile. Dai uno sguardo allo rpy2 documentation for ggplot2. Per inserirlo nel notebook, puoi disegnare su un dispositivo PNG/SVG, quindi leggerlo dal lato Python (questo è ciò che fa rmagic).

+0

Non voglio usare 'rmagic' voglio usare direttamente rpy2, ma non vedere un esempio di un notebook con rpy2 sulla pagina ti sei collegato ai documenti ... non sai come disegnare su un dispositivo e poi leggerlo di nuovo? Non è automatizzato? – user248237dfsf

+2

rmagic è ciò che automatizza l'utilizzo di un dispositivo png e la lettura dell'output. Se preferisci usare direttamente rpy2, dovrai farlo tu stesso. Puoi guardare [il codice sorgente per rmagic] (https://github.com/ipython/ipython/blob/master/IPython/extensions/rmagic.py). –

+0

Sembra un'impresa importante ... non ne vale la pena, ma vuol dire che i taccuini ipython non sono utili per le persone che usano ggplot/rpy2 invece di matplotlib – user248237dfsf

3

Questo è stato scritto senza guardare il codice in rmagic. Hanno un modo più intelligente di farlo (ho 11 linee di codice).

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) 

Per provarlo:

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

questo codice è la prima volta che sono stato in grado di caricare e utilizzare dataset da rpy2. I set di dati di questa pagina non funzionavano: http: //rpy.sourceforge.net/rpy2/doc-2.2/html/graphics.html#package-ggplot2 – zach

+0

@zach: R ha cambiato il modo in cui tratta internamente con i set di dati, e rpy2 è stato adattato per accogliere tali cambiamenti (sebbene il risultato immediato non sia l'interfaccia più amichevole). Non posso escludere che ci fossero dei punti nella documentazione in cui questo non è stato aggiornato, ma qui il problema potrebbe essere che stai guardando la documentazione di rpy2-2.2.x mentre probabilmente stai usando rpy2-2.3.x. In ogni caso, la migliore possibilità di vedere qualcosa di fisso è riportare il problema (email, pagina del progetto, ecc ...). – lgautier

+0

Grazie. A volte è difficile persino sapere qual è il problema ... Ma farò un lavoro migliore di segnalazione. Grazie per il tuo ottimo lavoro. – zach

Problemi correlati