matplotlib在自动生成的HTML中嵌入数字

时间:2018-02-10 06:06:04

标签: python html matplotlib

我想将python matplotlib生成的数字嵌入到包含其他内容的html文件中。这可能吗?

我所想的是将数据保存为png文件,然后使用<img>标记来引用它。

我尝试使用的一些代码就像:

import matplotlib.pyplot as plt
fig = plt.figure()
#plot sth
plt.savefig('test.png')

html = 'Some html head' + '<img src=\'test.png\'>' + 'Some more html'

with open('test.html','w') as f:
    f.write(html)

但是,这将生成两个文件而不是一个,我没有服务器来托管png文件。这可能是将这个数字嵌入到html中吗?我怎么在python中做到这一点。

谢谢。

2 个答案:

答案 0 :(得分:6)

您可以将图像写入临时文件并使用base64对其进行编码,然后将编码的base64图像嵌入到html中。大多数现代浏览器都会正确渲染图像。

从您的代码修改的简短示例将是:

import matplotlib.pyplot as plt
import base64
from io import BytesIO

fig = plt.figure()
#plot sth

tmpfile = BytesIO()
fig.savefig(tmpfile, format='png')
encoded = base64.b64encode(tmpfile.getvalue())

html = 'Some html head' + '<img src=\'data:image/png;base64,{}\'>'.format(encoded) + 'Some more html'

with open('test.html','w') as f:
    f.write(html)

答案 1 :(得分:1)

您可以使用base64编码转换图像: https://docs.python.org/3/library/base64.html#base64.encodebytes

然后将编码的字符串嵌入到html中,如下所示: How to display Base64 images in HTML?