Dis*_*dSC 1 python django matplotlib
我正在使用一个名为 matplotlib 的包根据用户输入创建一些图表。创建这些图表可以像这样完成
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
some_plot = plt.figure()
Run Code Online (Sandbox Code Playgroud)
此外,还可以将这些图形保存为图像,
some_plot.savefig(path, format='png')
Run Code Online (Sandbox Code Playgroud)
问题是我并不是真的想保存每个用户生成的图表,而是只想显示它们。我试图寻找一些相关问题的解决方案。其中一种解决方案是使用 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')
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式将 BytesIO 对象传递给模板并提供图像,或者此方法不起作用?还有其他方法可以做到这一点吗?
经过一段时间的搜索和摆弄我的代码后,我终于找到了答案。我在下面提供了我的工作代码的完整示例,因为我在网上找到的大多数答案都非常简短且神秘。
进口
from io import BytesIO
import base64
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)
意见
plt.plot(range(10))
buf = BytesIO()
plt.savefig(buf, format='png')
image_base64 = base64.b64encode(buf.getvalue()).decode('utf-8').replace('\n', '')
buf.close()
Run Code Online (Sandbox Code Playgroud)
然后,您可以将 image_base64 传递到您的模板并使用
模板
<img src="data:image/png;base64, {{ image_base64 }}" alt="somealt" />
Run Code Online (Sandbox Code Playgroud)
感谢 DavidG 和 swatchai 的评论为我指明了正确的搜索方向。
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |