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

发布于 2024-10-27 01:31:19 字数 125 浏览 1 评论 0原文

我想使用 Matplotlib 和 pyplot 生成要在 Django 框架中使用的 svg 图像。截至目前,我已经生成了由页面链接到的图像文件,但是有没有办法直接将 svg 图像作为 unicode 字符串获取,而无需写入文件系统?

I'd like to use Matplotlib and pyplot to generate an svg image to be used in a Django framework. as of now I have it generating image files that are link to by the page, but is there a way to directly get with the svg image as a unicode string without having to write to the file system?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅沫记忆 2024-11-03 01:31:19

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

Try using StringIO to avoid writing any file-like object to disk.

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
青衫负雪 2024-11-03 01:31:19

这里是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

Here is python3 version

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
故人爱我别走 2024-11-03 01:31:19

根据 abasar 的回答,我建议以下代码片段:

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)

Based on abasar's answer, I propose the following snippet:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文