【问题标题】:Save ggplot2 figure via rpy2 into a Python buffer通过 rpy2 将 ggplot2 图保存到 Python 缓冲区中
【发布时间】:2018-07-17 03:33:41
【问题描述】:

我正在尝试将使用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: 转换 'py2ri' 没有为类型“'”的对象定义

我尝试使用rpy2.robjects.lib.ggplot2.GGPlot.save 功能。

【问题讨论】:

    标签: python python-3.x ggplot2 rpy2


    【解决方案1】:

    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))
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多