Wie zeichnet man eine Matplotlib-Figur in einem Reportlab-Canvas?

Ich möchte eine mit matplotlib erzeugte Figur mit der Methode drawImage zu einem Reportlab-Canvas hinzufügen, ohne die Figur zuerst auf der Festplatte speichern zu müssen.

Meine Frage bezieht sich auf:Gibt es eine Matplotlib, die für ReportLab fließfähig ist?, was schön gelöst wurde. Ich möchte jedoch keine DocTemplates, Stories, Flowables usw. verwenden. Wie bereits erwähnt, möchte ich sie mit drawImage an einer bestimmten Position im Canvas platzieren.

Ich habe versucht, die matplotlib-Zahl mit den folgenden Methoden in ein PIL-Bild zu konvertieren:

1)http://www.icare.univ-lille1.fr/wiki/index.php/How_to_convert_a_matplotlib_figure_to_a_numpy_array_or_a_PIL_image

2)http://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server

Ein Code, der beispielsweise nicht funktioniert, ist:

import Image
import matplotlib.pyplot as plt
import cStringIO
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm

fig = plt.figure(figsize=(4, 3))
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

imgdata = cStringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0)  # rewind the data
im = Image.open(imgdata)

c = canvas.Canvas('test.pdf')
#c.drawImage(imgdata, cm, cm, inch, inch)
c.drawImage(im, cm, cm, inch, inch)
c.save()

Ich versuche zu zeichnenimgdata ergibt den Fehler:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'

Beim Zeichnenim gibt:

AttributeError: rfind

Weiß jemand jetzt, wie man dieses Problem löst? Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage