通过 rpy2 将 ggplot2 图保存到 Python 缓冲区中
Save ggplot2 figure via rpy2 into a Python buffer
我正在尝试将使用 rpy2
创建的 ggplot2
R 对象的输出保存到由 Python 控制的缓冲区中。
我可以使用 matplotlib
来做到这一点,但我似乎无法通过 rpy2
.
使用 ggplot2 来做到这一点
在 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: Conversion 'py2ri' not defined for objects of type ''
我正在尝试使用 rpy2.robjects.lib.ggplot2.GGPlot.save
功能。
R 的 ggplot2::ggsave
需要指定路径(相对或绝对)的字符串作为参数 filename
的自变量。例如 "/this/is/my/figure.png"
.
一个PythonBytesIO
对象是完全不同的。它是内存中的二进制流(大致 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))
我正在尝试将使用 rpy2
创建的 ggplot2
R 对象的输出保存到由 Python 控制的缓冲区中。
我可以使用 matplotlib
来做到这一点,但我似乎无法通过 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: Conversion 'py2ri' not defined for objects of type ''
我正在尝试使用 rpy2.robjects.lib.ggplot2.GGPlot.save
功能。
R 的 ggplot2::ggsave
需要指定路径(相对或绝对)的字符串作为参数 filename
的自变量。例如 "/this/is/my/figure.png"
.
一个PythonBytesIO
对象是完全不同的。它是内存中的二进制流(大致 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))