2011-03-28 5 views
11

Me gustaría utilizar Matplotlib y pyplot para generar una imagen SVG que se utiliza en un marco de Django. a partir de ahora lo tengo generando archivos de imagen que están enlazados por la página, pero ¿hay alguna forma de obtener directamente la imagen svg como una cadena unicode sin tener que escribir en el sistema de archivos?SVG Matplotlib como cadena y no un archivo

Respuesta

16

Trate de usar StringIO evitar escribir cualquier objeto de fichero en el disco.

import matplotlib.pyplot as plt 
import StringIO 
from matplotlib import numpy as np 

x = np.arange(0,np.pi*3,.1) 
y = np.sin(x) 

fig = plt.figure() 
plt.plot(x,y) 

imgdata = StringIO.StringIO() 
fig.savefig(imgdata, format='svg') 
imgdata.seek(0) # rewind the data 

svg_dta = imgdata.buf # this is svg data 

file('test.htm', 'w').write(svg_dta) # test it 
+1

Es probable que vale la pena señalar que 'cStringIO.StringIO()' proporciona un más rápido, pero la versión menos flexible de lo mismo, también. http://docs.python.org/library/stringio.html#module-cStringIO Si el PO es en realidad va a utilizar en el código de producción, puede hacer una diferencia (o no!). De todos modos, un objeto similar a un archivo 'StringIO' es definitivamente el camino a seguir. –

Cuestiones relacionadas