/ / rpy2を使ってggplot2の図をPythonのバッファに保存する - python、python-3.x、ggplot2、rpy2

rpy2経由でggplot2の図をPythonのバッファに保存する - python、python-3.x、ggplot2、rpy2

私は、その出力を保存しようとしています。 ggplot2 R を使用して作成されるオブジェクト rpy2 Pythonによって制御されるバッファに格納します。

私はこれを行うには matplotlib しかし、私はそれをするように見えることはできません 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 特徴。

回答:

回答№1は1

R "s 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))