[英]Save ggplot2 figure via rpy2 into a Python buffer
我正在嘗試將使用rpy2
創建的ggplot2
R對象的輸出保存到Python控制的緩沖區中。
我可以使用matplotlib
來做到這一點,但我似乎無法通過rpy2
使用ggplot2做到這rpy2
。
在matplotlib.pyplot
,這可以通過以下方式完成:
import matplotlib.pyplot as plt
import io
import numpy
def test_save():
x = numpy.linspace(-5, 5)
y = 3*x + 2
fig = plt.figure()
plt.plot(x, f)
buf = io.BytesIO()
plt.savefig(buf, format = 'png')
return buf
ggplot2
嘗試:
import io
import numpy
import rpy2.robjects as robjects
from pandas import DataFrame
import rpy2.robjects.lib.ggplot2 as ggplot2
def test_ggplot2_save():
x = numpy.linspace(-5, 5)
y = 3*x + 2
df = DataFrame({'x': x, 'y': y})
gp = ggplot2.ggplot(df)
pp = (gp
+ ggplot2.aes_string(x='x', y='y')
+ ggplot2.geom_point()
+ ggplot2.labs(title="MY DATA", x='x', y='y'))
# pp.plot()
buf = io.BytesIO()
robjects.r.ggsave(filename=buf, plot=pp, width=200, height=120, unit='mm')
錯誤:
NotImplementedError:類型``''的對象未定義轉換'py2ri'
我正在嘗試使用rpy2.robjects.lib.ggplot2.GGPlot.save
功能。
R的ggplot2::ggsave
期望一個字符串,該字符串指定路徑(相對或絕對)作為參數filename
的參數。 例如"/this/is/my/figure.png"
。
Python BytesIO
對象是完全不同的。 它是一個內存中的二進制流(大致上像(二進制)文件一樣運行的Python對象)。
如果使用ggsave
是不是絕對的要求,可以考慮使用rpy2.robjects.lib.grdevices.render_to_bytesio()
此功能使以下代碼在Jupyter筆記本中顯示嵌入式圖形:
from rpy2.ipython.ggplot import image_png
# pp is your ggplot2 figure
display(image_png(pp))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.