刷新烧瓶模板后matplotlib图形错误

时间:2017-10-09 17:09:48

标签: python matplotlib 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 }}">

1 个答案:

答案 0 :(得分:2)

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

要做到这一点,请包括

plt.figure()

..前

plt.plot() 

同时使用rendergraph1()rendergraph()方法。

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