首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:如何在flask中显示matplotlib

Python:如何在flask中显示matplotlib
EN

Stack Overflow用户
提问于 2018-06-07 03:41:55
回答 2查看 78.5K关注 0票数 52

我对Flask和Matplotlib很陌生。我希望能够用一些html格式显示我生成的简单图表,但我很难弄清楚怎么做。以下是我的Python代码:

代码语言:javascript
复制
from flask import Flask, render_template
import numpy as np
import pandas
import matplotlib.pyplot as plt

app = Flask(__name__)
variables = pandas.read_csv('C:\\path\\to\\variable.csv')
price =variables['price']


@app.route('/test')
def chartTest():
    lnprice=np.log(price)
    plt.plot(lnprice)
    return render_template('untitled1.html', name = plt.show())

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

下面是我的HTML:

代码语言:javascript
复制
<!doctype html>
<html>
   <body>

      <h1>Price Chart</h1>

      <p>{{ name }}</p>

      <img src={{ name }} alt="Chart" height="42" width="42">

   </body>
</html>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:22:07

您可以在Flask URL路由处理程序中动态生成图像:

代码语言:javascript
复制
import io
import random
from flask import Response
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

@app.route('/plot.png')
def plot_png():
    fig = create_figure()
    output = io.BytesIO()
    FigureCanvas(fig).print_png(output)
    return Response(output.getvalue(), mimetype='image/png')

def create_figure():
    fig = Figure()
    axis = fig.add_subplot(1, 1, 1)
    xs = range(100)
    ys = [random.randint(1, 50) for x in xs]
    axis.plot(xs, ys)
    return fig

然后,您需要在HTML模板中包含图像:

代码语言:javascript
复制
<img src="/plot.png" alt="my plot">
票数 83
EN

Stack Overflow用户

发布于 2018-06-07 04:14:24

正如@d parolin指出的那样,由matplotlib生成的图形在被HTML呈现之前需要保存。为了通过超文本标记语言在flask中提供图像,您需要将图像存储在flask文件目录中:

代码语言:javascript
复制
static/
  images/
    plot.png --> store plots here
templates/

因此,在您的应用程序中应使用plt.savefig

代码语言:javascript
复制
@app.route('/test')
def chartTest():
  lnprice=np.log(price)
  plt.plot(lnprice)   
  plt.savefig('/static/images/new_plot.png')
  return render_template('untitled1.html', name = 'new_plot', url ='/static/images/new_plot.png')

然后在untitled1.html

代码语言:javascript
复制
  <p>{{ name }}</p>

  <img src={{ url}} alt="Chart" height="42" width="42">
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档