Я пытаюсь создать приложение, в котором пользователь может загрузить CSV-файл данных и просмотреть данные через браузер на другом маршруте фляги, который также отображает график данных.
Iвозникли проблемы в моем коде, пытаясь показать график данных.(ссылаясь на статический файл .png) Я могу заставить работать кадр данных pandas в HTML, но в моем файле table.html я пытаюсь сослаться на график png, созданный с помощью matplot lib и сохраненный в статическом каталоге.
<img src="{{url_for('static', filename=filename)}}" />
Все эти эксперименты связаны с проблемами с кешем в браузере, поэтому я создаю уникальное имя файла с функцией next_file_name
, и я думаю, что именно здесь я облажался в HTML &Джинджа пытается сослаться на это уникальное имя файла. Я надеюсь, что уникальное имя файла может исправить проблемы с кешем, которые я наблюдаю.Файлы png сохраняются должным образом с помощью функции plot0, plot1, plot2, plot3 и т. Д. ...
Я надеялся создать что-то, где я мог бы повторить процесс анализа новых данных иполучать извлечение нового нового графика данных.Любые советы помогают, спасибо
from flask import Flask, make_response, request, render_template
from werkzeug.utils import secure_filename
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import time
app = Flask(__name__, static_url_path='/static')
num = 0
def next_file_name(num):
return 'static/plot%d.png' % num
@app.route('/')
def form():
return render_template('form.html')
@app.route('/transform', methods=["POST"])
def transform_view():
global num
f = request.files['data_file']
filename = secure_filename(f.filename)
f.save(filename)
df = pd.read_csv(filename, index_col='Date', parse_dates=True)
OAT = pd.Series(df['OAT'])
RAT = pd.Series(df['RAT'])
MAT = pd.Series(df['MAT'])
df_OATrat = (OAT - RAT)
df_MATrat = (MAT - RAT)
plt.scatter(df_OATrat,df_MATrat, color='grey', marker='+')
plt.xlabel('OAT-RAT')
plt.ylabel('MAT-RAT')
plt.title('Economizer Diagnostics')
plt.plot([0,-18],[0,-18], color='green', label='100% OSA during ideal conditions')
plt.plot([0,20],[0,5], color='red', label='Minimum OSA in cooling mode')
plt.plot([0,-38],[0,-9.5], color='blue', label='Minimum OSA in heating mode')
plt.plot([0,0],[-20,10], color='black')
plt.plot([-30,20],[0,0], color='black')
#plt.legend()
plt.text(-3, -28, time.ctime(), fontsize=9)
pic = next_file_name(num)
plt.savefig(pic)
num+=1
resp = make_response(render_template('table.html', tables=[df.to_html(classes='data')], titles=df.columns.values, filename='pic'))
resp.cache_control.no_cache = True
return resp
if __name__ == '__main__':
app.run(debug=True)
table.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<title>Title</title>
</head>
<body>
<h1>Economizer Data Plot</h1>
<img src="{{url_for('static', filename=filename)}}" />
</form>
{% for table in tables %}
{{ table|safe }}
{% endfor %}
</body>
</html>