flask - 如何以图像格式保存绘图
问题描述
这里的“graphJSON”是一个用于绘制图形的变量,我如何使用这个变量捕获(图像格式)图形?
graphJSON = json.dumps(data, cls=plotly.utils.PlotlyJSONEncoder)
plotly.io.to_image(graphJSON, format=None,
scale=None, width=None, height=None)
解决方案
- 安装plotly-orca
- 创建你的情节图
- 将图形转换为PNG
- 将二进制 PNG 转换为 base64 编码字节
- 将 base64 字节解码
ascii
并传递给您的 Jinja2 模板
完整代码
import plotly
import base64
import jinja2
# create the graph
scatter = plotly.graph_objs.Scatter(x=[1, 2, 3], y=[2, 1, 3])
layout = plotly.graph_objs.Layout()
fig = plotly.graph_objs.Figure([scatter], layout)
# convert graph to JSON
fig_json = fig.to_json()
# convert graph to PNG and encode it
png = plotly.io.to_image(fig)
png_base64 = base64.b64encode(png).decode('ascii')
# definition of the Jinja2 template
template = """<html>
<head>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
<img src="data:image/png;base64,{{ png_base64 }}" />
<div id='divPlotly'></div>
<script>
var plotly_data = {{ plotly_data }}
Plotly.react('divPlotly', plotly_data.data, plotly_data.layout);
</script>
</body>
</html>"""
# generate the HTML page
with open('new_plot.html', 'w') as f:
f.write(jinja2.Template(template).render(png_base64=png_base64,
plotly_data=fig_json))
推荐阅读
- mysql - 带有 IF-THEN 条件的 Mysql AFTER UPDATE 触发器,但没有数据插入
- vim - 为什么 yyp 的行为不符合 p 的文档
- javascript - 计算发送了多少请求的简洁方法是什么?
- gnuplot - 直方图中存在透明线
- c# - 如何在 RTF 格式的富文本框中插入超链接
- android - 如何摆脱谷歌在APK中的炸药测量?
- html - 使用纯 CSS 悬停在第一个元素上时触发:悬停在第二个元素上
- java - Android SQLITE 外键列为空
- c++ - 避免未定义的行为:临时对象
- python - PYSNMP 代理在解码 Hexa 值后返回换行符作为输出