我正在使用一个名为matplotlib的包来根据用户输入创建一些图形。创建这些图表可以这样完成
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
some_plot = plt.figure()
此外,可以将这些图形保存为图像,
some_plot.savefig(path, format='png')
问题在于我并不是真的想要保存每个用户生成的图形,而是我想只显示它们。我试图找出一些相关问题的解决方案。一种这样的解决方案是使用IoBytes。按照这些答案,我得到像
这样的东西from io import BytesIO
some_plot_io = BytesIO()
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
some_plot = plt.figure()
some_plot.savefig(some_plot_io, format='png')
是否有可能以某种方式将BytesIO对象传递给模板并提供图像,或者此方法不起作用?是否还有其他方法可以做到这一点?
答案 0 :(得分:2)
经过一段时间的搜索并摆弄我的代码后,我找到了答案。我已经在下面列出了我的工作代码的完整示例,因为我在网上找到的大多数答案都非常简短而且含糊不清。
进口
from io import BytesIO
import base64
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
视图
plt.plot(range(10))
buf = BytesIO()
plt.savefig(buf, format='png')
image_base64 = base64.b64encode(buf.getvalue()).decode('utf-8').replace('\n', '')
buf.close()
然后,您可以将image_base64传递给模板并使用
显示它模板
<img src="data:image/png;base64, {{ image_base64 }}" alt="somealt" />
感谢DavidG和swatchai的评论,指出我正在寻找正确的方向。