Matplotlib svg作为字符串而不是文件

cif*_*key 14 python django svg matplotlib

我想使用Matplotlib和pyplot生成一个svg图像,用于Django框架.到目前为止,我有它生成链接到页面的图像文件,但有没有办法直接获取svg图像作为unicode字符串,而无需写入文件系统?

Pau*_*aul 18

尝试使用StringIO以避免将任何类文件对象写入磁盘.

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
Run Code Online (Sandbox Code Playgroud)


aba*_*sar 6

这是python3版本

import matplotlib.pyplot as plt
import numpy as np
import io

f = io.BytesIO()
a = np.random.rand(10)
plt.bar(range(len(a)), a)
plt.savefig(f, format = "svg")

print(f.getvalue()) # svg string
Run Code Online (Sandbox Code Playgroud)

  • 我无法让浏览器呈现此结果,但是如果我将 `f = io.BytesIO()` 替换为 `f = io.StringIO()` 那么一切都会正常工作 (3认同)