Ich versuche, die Ausgabe eines zu speichern ggplot2
R Objekt erstellt mit rpy2
in einen von Python gesteuerten Puffer.
Ich kann das mit. Tun matplotlib
aber ich kann es anscheinend nicht damit machen ggplot2 über rpy2
.
Im matplotlib.pyplot
Dies kann erreicht werden mit:
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
Versuch:
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")
Error:
NotImplementedError: Konvertierung "py2ri" nicht für Objekte vom Typ "" definiert
Ich habe versucht, das zu verwenden rpy2.robjects.lib.ggplot2.GGPlot.save
Feature.
Antworten:
1 für die Antwort № 1R "s ggplot2::ggsave
erwartet eine Zeichenfolge, die einen Pfad (relativ oder absolut) als Argument für den Parameter angibt filename
. Beispielsweise "/this/is/my/figure.png"
.
Ein Python BytesIO
Objekt ist ganz anders. Es ist ein binärer In-Memory-Stream (grob gesagt Python-Objekt, das sich wie eine (binäre) Datei verhält).
Wenn Sie verwenden ggsave
ist keine absolute Anforderung, in Betracht ziehen zu verwenden
rpy2.robjects.lib.grdevices.render_to_bytesio()
. Mit dieser Funktion werden folgende Inline-Figuren im Jupyter-Notizbuch angezeigt:
from rpy2.ipython.ggplot import image_png
# pp is your ggplot2 figure
display(image_png(pp))