当前位置: 首页 > 知识库问答 >
问题:

Python:如何在flask中显示matplotlib[重复]

陈法
2023-03-14

我对烧瓶和Matplotlib非常陌生。我希望能够显示一个简单的图表,我生成的一些html,但我有一个非常困难的时间弄清楚如何。这是我的Python代码:

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:

<!doctype html>
<html>
   <body>

      <h1>Price Chart</h1>

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

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

   </body>
</html>

共有2个答案

濮阳翔
2023-03-14

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

static/
  images/
    plot.png --> store plots here
templates/

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

@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中:

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

  <img src={{ url}} alt="Chart" height="42" width="42">
谭建章
2023-03-14

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

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模板中包含图像:

<img src="/plot.png" alt="my plot">
 类似资料:
  • 问题内容: 我对Flask和Matplotlib非常陌生。我希望能够显示我在某些html中生成的简单图表,但是我很难弄清楚该怎么做。这是我的Python代码: 这是我的HTML: 问题答案: 您可以在Flask URL路由处理程序中即时生成图像: 然后,您需要将图像包含在HTML模板中:

  • 问题内容: 假设我在matplotlib中有两个图形,每个图形有一个图形: 然后我一次展示两个 有没有办法分别显示它们,即仅显示它们? 或更妙的是:如何像下面的“一厢情愿”代码那样单独 管理 这些数字(无效): 问题答案: 当然。在添加使用。(编辑。)(编辑。) 或者,使用。

  • 我试图通过一个图像的文件名并呈现在模板上虽然我通过它的实际名称不显示在页面上 例如:profilepic_filename=/data/tim/img.jpg我已经试过了 而且我也尝试过 这两个都不管用

  • 问题内容: 我从一个需要标准输入重定向的Python项目开始,使用类似于以下的代码: 问题是,代码运行后,将显示以下内容: 输入内容:您输入的内容:Hello 有没有办法修改我的代码,以便显示以下内容? 输入内容:您好 您输入了:您好 我一直在搜寻高低,但尚未找到答案。如果有人有主意,我将不胜感激。谢谢! 问题答案: 我不确定为什么需要这样做,但是您可以始终这样做: 再说一次,根据需要交换自己的实

  • 问题内容: 我有两个列表,当我用下面的代码绘图时,x轴只显示 最多12个(最多15个)。我可以知道如何显示x列表中的所有值吗 x轴?提前谢谢。 如果我在“set xticklabels”函数中设置minor=True,它将显示所有 x=2,4,6,8,…,16。。。但我想要所有的价值观。 P、 我的x轴没有排序,应该显示如图所示。 问题答案: Add this: To your code befo

  • 问题内容: 我正在寻找如何在Flask模板中输出当前年份。我知道你可以在Django中使用.,但是有Flask等效项吗?到目前为止,我一直无法找到任何东西。 问题答案: 使用模板上下文处理器将当前日期传递给每个模板,然后呈现其year属性。 render如果大多数模板中不需要它,也可以将其与一起传递。