【问题标题】:why I cant return my plot graph in flask python为什么我不能在烧瓶 python 中返回我的绘图图
【发布时间】:2021-06-24 01:06:56
【问题描述】:

我需要一些帮助,情况是我能够返回新的 CSV 文件但无法将绘图图返回到另一个页面,并且我确实在不同的情况下将 return 分开了。有谁可以指出我应该对我的代码做什么?或者给我一些提示,在此先感谢!

app.py

@app.route('/transform', methods=["POST"])
def transform_view():
    if request.method == 'POST':
        if request.files['data_file']:
            f = request.files['data_file']
            if not f:
                return "No file"
    
            
            stream = io.StringIO(f.stream.read().decode("UTF8"), newline=None)
            csv_input = csv.reader(stream)
            stream.seek(0)
            result = stream.read()
            df = pd.read_csv(StringIO(result), usecols=[1])
            
            #extract month value
            df2 = pd.read_csv(StringIO(result))
            matrix2 = df2[df2.columns[0]].to_numpy()
            list1 = matrix2.tolist()
             
            # load the model from disk
            model = load_model('model.h5')
            dataset = df.values
            dataset = dataset.astype('float32')
            scaler = MinMaxScaler(feature_range=(0, 1))
            dataset = scaler.fit_transform(dataset)
            look_back = 1
            dataset_look = create_dataset(dataset, look_back)
            dataset_look = np.reshape(dataset_look, (dataset_look.shape[0], 1, dataset_look.shape[1]))
            predict = model.predict(dataset_look)
            transform = scaler.inverse_transform(predict)
    
            X_FUTURE = 12
            transform = np.array([])
            last = dataset[-1]
            for i in range(X_FUTURE):
                curr_prediction = model.predict(np.array([last]).reshape(1, look_back, 1))
                last = np.concatenate([last[1:], curr_prediction.reshape(-1)])
                transform = np.concatenate([transform, curr_prediction[0]])
          
            transform = scaler.inverse_transform([transform])[0]
    
            dicts = []
            curr_date = pd.to_datetime(list1[-1])
            for i in range(X_FUTURE):
                curr_date = curr_date +  relativedelta(months=+1)
                dicts.append({'Predictions': transform[i], "Month": curr_date})
    
    
            new_data = pd.DataFrame(dicts).set_index("Month")
            ##df_predict = pd.DataFrame(transform, columns=["predicted value"])
    
                          
        
            response = make_response(new_data.to_csv(index = True, encoding='utf8'))
            response.headers["Content-Disposition"] = "attachment; filename=result.csv"
            return response
        
            labels = [
                        'JAN', 'FEB', 'MAR', 'APR',
                        'MAY', 'JUN', 'JUL', 'AUG',
                        'SEP', 'OCT', 'NOV', 'DEC'
                       ]
    
            values = [
                            967.67, 1190.89, 1079.75, 1349.19,
                            2328.91, 2504.28, 2873.83, 4764.87,
                            4349.29, 6458.30, 9907, 16297
                        ]
    
            colors = [
                            "#F7464A", "#46BFBD", "#FDB45C", "#FEDCBA",
                            "#ABCDEF", "#DDDDDD", "#ABCABC", "#4169E1",
                            "#C71585", "#FF4500", "#FEDCBA", "#46BFBD"]
            return redirect(url_for('line'))
    
    @app.route('/line')
    def line():
        line_labels=labels
        line_values=values
        return render_template('graph.html', title='Bitcoin Monthly Price in USD', max=17000, labels=line_labels, values=line_values)

【问题讨论】:

    标签: python django flask graph


    【解决方案1】:

    您必须先将其保存到特定文件夹,然后在前端您可以指定图像,就像您在 url 中传递它一样

    from matplotlib import pyplot as plt
         
    plt.savefig('path/plot.png')
    

    或者您可以使用 JavaScript 将图形呈现到前端,您可以使用 chart.js 等。

    【讨论】:

    • 嗨@Bhavya,感谢您的评论,我确实尝试添加plt.savefig('path/plot.png'),但它实际上不起作用,问题是它根本无法返回render_template,你能演示一下如何如您所说,使用 chart.js 绘制图形?
    • 嘿,您可以从这里参考stackoverflow.com/questions/50728328/…!而对于chart.js,你可以通过官方文档以及堆栈溢出它自己,你可以找到你的答案,只需尝试差异。方法。
    • 我认为chartjs 也不起作用,因为它也必须return render_template,我的问题是第二个return 根本不起作用
    • 我已经编辑了另一个版本让你看到我的问题,我无法返回我的return redirect(url_for('line')),请帮助~
    • 您的代码与python中所需的正确缩进不符,请先查看是否有条件请更新代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-09-12
    • 2013-07-21
    • 2023-03-03
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多