2011-03-28 15 views
11

Bir Django çerçevesinde kullanılacak bir svg resmi oluşturmak için Matplotlib ve pyplot kullanmak istiyorum. Şu andan itibaren sayfa tarafından link olan görüntü dosyaları üretiyorum, ancak dosya sistemine yazmak zorunda kalmadan svg resminin bir unicode dizesi ile doğrudan elde edilmesinin bir yolu var mı?Matplotlib svg dize olarak ve bir dosya değil

cevap

16

Diskte dosya benzeri nesne yazmamak için StringIO kullanmayı deneyin.

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

Muhtemelen 'cStringIO.StringIO()' daha hızlı sağladığını işaret etmek değerli ama aynı şey daha az esnek versiyonu yanı bu. http://docs.python.org/library/stringio.html#module-cStringIO Eğer OP aslında üretim kodunda kullanılacaksa, bir fark yaratabilir (veya değil!). Yine de, bir 'StringIO' dosya benzeri nesne kesinlikle gitmek için yoldur. –