2013-02-25 31 views
5

Có thể sử dụng rpy2 (gọi ggplot2) với sổ ghi chép IPython không, và sau đó lưu chúng (và chia sẻ trên NBViewer như các sổ tay khác http://nbviewer.ipython.org/)? Có bất kỳ thách thức nào trong việc có các ggplots rpy2 xuất hiện trong sổ ghi chép và/hoặc tương tác không? Sẽ rất hữu ích nếu ai đó có thể cung cấp một phiên ví dụ và đầu ra của nó tạo ra một hình ggplot2 trong một sổ ghi chép bằng cách sử dụng rpy2 trong IPython.sử dụng rpy2 với máy tính xách tay IPython?

Trả lời

1

Có thể với phần mở rộng rmagic, sử dụng rpy2. Bạn dường như cần phải print() con số để hiển thị nó, mặc dù. Dưới đây là phiên ví dụ: http://nbviewer.ipython.org/5029692

Nếu bạn muốn sử dụng trực tiếp rpy2, bạn phải thực hiện điều này. Hãy xem qua số rpy2 documentation for ggplot2. Để đưa nó vào sổ ghi chép, bạn có thể vẽ đến một thiết bị PNG/SVG, sau đó đọc nó từ phía Python (đây là những gì rmagic làm).

+0

Tôi không muốn sử dụng 'rmagic' Tôi muốn sử dụng rpy2 trực tiếp, nhưng tôi không thấy một ví dụ về một máy tính xách tay với rpy2 trên trang bạn đã liên kết đến từ tài liệu ... không chắc chắn cách vẽ thiết bị và sau đó đọc lại? Nó không tự động? – user248237dfsf

+2

rmagic là những gì tự động sử dụng một thiết bị png và đọc đầu ra. Nếu bạn thích sử dụng rpy2 trực tiếp, bạn sẽ phải tự làm điều đó. Bạn có thể xem [mã nguồn cho rmagic] (https://github.com/ipython/ipython/blob/master/IPython/extensions/rmagic.py). –

+0

Điều đó nghe có vẻ khó hiểu ... nhưng không có nghĩa là máy tính ipython về cơ bản không hữu ích cho những người sử dụng ggplot/rpy2 thay vì matplotlib – user248237dfsf

3

Điều này được viết mà không cần tìm mã trong rmagic. Họ có một cách thông minh hơn để làm điều đó (tôi có 11 dòng mã).

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) 

Để thử nó:

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

mã này là lần đầu tiên tôi có thể tải và sử dụng bộ dữ liệu từ rpy2. Các tập dữ liệu từ trang này không hoạt động: http: //rpy.sourceforge.net/rpy2/doc-2.2/html/graphics.html#package-ggplot2 – zach

+0

@zach: R thay đổi cách thức xử lý nội bộ với các tập dữ liệu và rpy2 đã được điều chỉnh để phù hợp với những thay đổi đó (mặc dù kết quả ngay lập tức không phải là giao diện thân thiện nhất). Tôi không thể loại trừ rằng có những nơi trong tài liệu này đã không được cập nhật, nhưng ở đây vấn đề có thể là bạn đang xem tài liệu cho rpy2-2.2.x trong khi có thể sử dụng rpy2-2.3.x. Trong mọi trường hợp, cơ hội tốt nhất để xem một cái gì đó cố định là để báo cáo vấn đề (email, trang của dự án, vv ...). – lgautier

+0

Cảm ơn. Đôi khi khó mà biết được vấn đề là gì ..... Nhưng tôi sẽ làm một công việc báo cáo tốt hơn. Cảm ơn vì công việc tuyệt vời của bạn. – zach

Các vấn đề liên quan