如何创建要在Flask上显示的动态图? [英] How to create dynamic plots to display on Flask?

查看:267
本文介绍了如何创建要在Flask上显示的动态图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望根据烧瓶应用程序上的用户输入来创建动态图.但是我收到以下错误: 预期的字符串参数,为字节"

I wish to create dynamic plots based on user input on a flask app. However I am getting the following error: string argument expected, got 'bytes'

如果我使用io.BytesIO(),则不会收到此错误,但不会在test.html上获得绘图.

If I use io.BytesIO(), I am not getting this error, but I am not getting the plot on test.html

from flask import Flask
from flask import render_template
import matplotlib.pyplot as plt
import io
import base64

app = Flask(__name__)

@app.route('/plot')
def build_plot():
    img = io.StringIO()
    y = [1,2,3,4,5]
    x = [0,2,1,3,4]
    plt.plot(x,y)
    plt.savefig(img, format='png')
    img.seek(0)

    plot_url = base64.b64encode(img.getvalue())
    return render_template('test.html', plot_url=plot_url)

if __name__ == '__main__':
    app.debug = True
    app.run()

Test.html

Test.html

<!DOCTYPE html>
<html>
<title> Plot</title>
<body>
<img src="data:image/png;base64, {{ plot_url }}">
</body>
</html>

推荐答案

使用BytesIO和更高版本的decode()

工作示例

from flask import Flask
#from flask import render_template
import matplotlib.pyplot as plt
import io
import base64

app = Flask(__name__)

@app.route('/plot')
def build_plot():

    img = io.BytesIO()

    y = [1,2,3,4,5]
    x = [0,2,1,3,4]
    plt.plot(x,y)
    plt.savefig(img, format='png')
    img.seek(0)

    plot_url = base64.b64encode(img.getvalue()).decode()

    return '<img src="data:image/png;base64,{}">'.format(plot_url)

if __name__ == '__main__':
    app.debug = True
    app.run()

这篇关于如何创建要在Flask上显示的动态图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆