目前设计了一个网页,用户可以通过excel上传数据到数据库,下一步我想在网页上增加一个按钮,点击这个按钮,用户可以把他所上传的数据与我的数据通过图片进行对比(python代码已经写好,就是不知道怎么应用到flask框架中在网页展示出来)。或者还有没有其他的解决办法,如果解决必定采纳!感谢!!(下面是我写的代码,其实就是机械地和路由结合起来,想的是作图保存好以后,一点击按钮,展示图片)
from flask import Flask, render_template, request
import pymysql
import xlrd
import numpy as np
import matplotlib as mp
@app.route("/seedling/sevendays/figure1")
def index6():
kwargs = {
"host": "localhost",
"port": 3306,
"user": "root",
"passwd": "10868325",
"database": "lxd",
"charset": "utf8"
}
db = pymysql.connect(**kwargs)
cur = db.cursor()
sql1 = "select R400,R401 from four_ss_seven where id=1;"
cur.execute(sql1)
a = []
for row in cur:
a.append(np.array(row))
arr1 = np.array(a).T
# print(arr1)
# print(arr1.shape)
sql2 = "SELECT R400,R401 FROM four_ss_seven ORDER BY id DESC LIMIT 1;"
cur.execute(sql2)
b = []
for row in cur:
b.append(np.array(row))
arr2 = np.array(b).T
# print(arr2)
# print(arr2.shape)
com = np.array([arr1, arr2]).T
com1 = np.reshape(com, (601, 2))
# print(com1)
# print(com1.shape)
arr3 = np.arange(400, 1001)
mp.figure(figsize=(8, 6), dpi=100)
mp.plot(arr3, com1, linestyle='-')
mp.xlabel(s='wavelength', fontsize=18)
mp.ylabel(s='reflectance', fontsize=18)
mp.title(s='spectral reflectance curve', fontsize=25)
mp.savefig('./static/img/1.png')
return render_template("sd_seven_fig1.html")
思路其实有多种,如你所说用户数据现在是可以上传了的,也就是说实际上你现在需要的是读取用户数据和你的数据,展示到同一个图表中,这个有很多种方案:
1、类似于你现在的方案,把数据绘图保存图片,然后把图片展示到前端,这个不是很推荐
2、利用pyecharts库,在后端把数据封装成option对象,然后给前端展示
3、把后端数据处理一下,直接发到前端,前端用echarts组件展示
以下是第3种方案的一个简单例子
import json
from random import randint
from flask import Flask, render_template
import numpy as np
app = Flask(__name__)
@app.route("/")
def index():
return render_template('show.html')
@app.route("/getdata")
def getData():
y1 = [randint(1,100) for i in range(1,10)]
y2 = [randint(1,100) for i in range(1,10)]
x = [1,2,3,4,5,6,7,8,9]
data = {}
data['x'] = x
data['y1'] = y1
data['y2'] = y2
print(data)
return json.dumps(data,ensure_ascii=False)
if __name__ == "__main__":
app.run()
show.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.3.3/echarts.min.js"></script>
<script>
$(document).ready(function () {
var main = echarts.init(document.getElementById("main"))
$.get('/getdata', function (resp) {
data = eval("(" + resp + ")")
option = {
title: {
text: 'Line'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['y1', 'y2']
},
xAxis: {
type: 'category',
boundaryGap: false,
data: data['x']
},
yAxis: {
type: 'value'
},
series: [
{
name: 'y1',
type: 'line',
stack: 'Total',
data: data['y1']
},
{
name: 'y2',
type: 'line',
stack: 'Total',
data: data['y2']
}
]
};
main.setOption(option);
});
});
</script>
</head>
<body>
<div id="main" style='width: 800px;height:500px'></div>
</body>
</html>
python可以使用pyecharts,前端发请求,数据库查询后返回,然后前端把返回的数据渲染成图表
使用echarts框架进行显示。