簡體   English   中英

通過rpy2將ggplot2圖形保存到Python緩沖區中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM