gpt4 book ai didi

python - 刷新 Flask 模板 matplotlib 图形后出现错误

转载 作者:行者123 更新时间:2023-12-01 02:32:29 32 4
gpt4 key购买 nike

我必须在我的 flask 模板中显示 2 个 matplotlib 图表。我得到了所需的输出,但是,由于我是 matplotlib 的新手,我无法弄清楚为什么刷新后第一个条形图会更改为第二个图。以下是完成这项工作的三个函数。

import matplotlib.pyplot as plt
import base64
import StringIO

@app.route('/FirmIn/admin/')
def admin():
plot_url=rendergraph1()
plot_url2=rendergraph2()
return render_template('admin.html', plot_url=plot_url, plot_url2=plot_url2)

def rendergraph1():
cursor.execute("SELECT category,count(*) from project_info group by category")
dataall=cursor.fetchall()
img = StringIO.StringIO()
category,index,count =[],[],[]
i=0
for data in dataall:
category.append(data[0])
index.append(i)
count.append(data[1])
i=i+1
print index, count
plt.bar(index, count, color = 'r')
plt.xticks(index, category, rotation=25)
plt.yticks(range(min(count), max(count)+1))
plt.rcParams['xtick.major.pad']='5'
plt.savefig(img, format='png')
img.seek(0)
plot_url = base64.b64encode(img.getvalue()).decode()
return plot_url

def rendergraph2():
cursor.execute("SELECT category,sum(project_cost) from project_info group by category")
img = StringIO.StringIO()
dataall=cursor.fetchall()
category,index,cost =[],[],[]
i=0
for data in dataall:
category.append(data[0])
index.append(i)
cost.append(data[1])
i=i+1
plt.plot(index,cost)
plt.xticks(index, category, rotation=25)
plt.savefig(img, format='png')
img.seek(0)
plot_url2 = base64.b64encode(img.getvalue()).decode()
return plot_url2

在模板内部我使用以下方式显示:

<img style="height:400px" src="data:image/png;base64, {{ plot_url }}">
<img style="height:400px" src="data:image/png;base64, {{ plot_url2 }}">

最佳答案

这样做的原因是因为它正在唯一可用的 Canvas 或窗口上更新。为了分别显示两个图像,您需要创建两个单独的窗口以保留两个图。

要执行此操作,请包括行

plt.figure()

..之前

plt.plot() 

rendergraph1()rendergraph() 方法中。

这应该可以解决这个问题。 :)

关于python - 刷新 Flask 模板 matplotlib 图形后出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46651633/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com