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

tv6aics1  于 2023-08-02  发布在  Python
关注(0)|答案(3)|浏览(117)

我想使用Matplotlib和pyplot来生成一个在Django框架中使用的svg图像。到目前为止,我已经生成了页面链接到的图像文件,但是有没有一种方法可以直接将svg图像作为unicode字符串获取,而不必写入文件系统?

voase2hg

voase2hg1#

尝试使用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

字符串

juzqafwq

juzqafwq2#

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

字符串

0mkxixxg

0mkxixxg3#

基于abasar's answer,我提出以下代码片段:

from io import StringIO
import matplotlib.pyplot as plt

def plot_to_svg() -> str:
    """
    Saves the last plot made using ``matplotlib.pyplot`` to a SVG string.
    
    Returns:
        The corresponding SVG string.
    """
    s = StringIO()
    plt.savefig(s, format="svg")
    plt.close()  # https://stackoverflow.com/a/18718162/14851404
    return s.getvalue()

a = [10, 20, 5]
plt.bar(range(len(a)), a)
svg = plot_to_svg()
print(svg)

字符串

相关问题