Matplotlib Bild als String zurückgeben

8

Ich verwende Matplotlib in einer Django-App und möchte das gerenderte Bild direkt zurückgeben. Bis jetzt kann ich plt.savefig(...) gehen und dann den Ort des Bildes zurückgeben.

Was ich machen möchte ist:

%Vor%

Irgendwelche Ideen?

    
DarwinSurvivor 10.07.2009, 10:46
quelle

4 Antworten

17

Djangos Objekt HttpResponse unterstützt die Datei-ähnliche API und Sie können ein Dateiobjekt an savefig übergeben.

%Vor%

Daher können Sie das Bild direkt in HttpResponse zurückgeben.

    
wierob 10.07.2009, 13:13
quelle
6

Was ist mit cStringIO ?

%Vor%     
sunqiang 10.07.2009 11:12
quelle
2

Es gibt ein Rezept im Matplotlib-Kochbuch , das genau das tut. Im Kern sieht es so aus:

%Vor%

Setzen Sie das in Ihre Sichten-Datei, zeigen Sie Ihre URL darauf, und Sie sind los und laufen.

Bearbeiten: Wie bereits erwähnt, ist dies eine vereinfachte Version eines Rezepts im Kochbuch. Es sieht jedoch so aus, als ob es einen Unterschied zwischen dem Aufruf von print_png und savefig gibt, zumindest beim ersten Test, den ich gemacht habe. Der Aufruf von fig.savefig(response, format='png') ergab ein Bild, das größer war und einen weißen Hintergrund hatte, während das ursprüngliche canvas.print_png(response) ein etwas kleineres Bild mit einem grauen Hintergrund lieferte. Also würde ich die letzten Zeilen oben durch ersetzen:

%Vor%

Sie müssen die Leinwand jedoch trotzdem instanziiert haben.

    
Tim Whitcomb 10.07.2009 21:56
quelle
0

Setze ein Ducktyping ein und übergib ein eigenes Objekt in Verkleidung des Dateiobjekts

%Vor%

Sie können myfile = StringIO.StringIO () stattdessen in echtem Code verwenden und Daten in der Antwort z. B.

zurückgeben %Vor%     
Anurag Uniyal 10.07.2009 11:01
quelle

Tags und Links