如何创建动态图表以在Flask上显示?

14

我希望在Flask应用程序中根据用户输入创建动态图表。 然而,我遇到了以下错误: 期望字符串参数,但得到了“字节”

如果我使用io.BytesIO(),我就不会遇到这个错误,但是我无法在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()

测试.html

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

1
在编程中,始终显示完整的错误消息(Traceback),因为其中包含其他有用的信息。 - furas
1个回答

28

使用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()

谢谢!正常工作。 - RRC
import matplotlib.pyplot as plt 上出现错误?我该如何修复它? - dev
1
@dev 什么错误?可能有许多不同的问题。如果无法导入 matplotlib,那么可能是您没有安装 matplotlib - pip install matplotlibpython -m pip install matplotlib - furas
@furas 谢谢。运行 pip install matplotlib 解决了问题。 - dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接