我需要根据 SQLite 数据库 中的数据制作图表。我正在为这个特定项目使用 flask。基本上,该表有一个名为情绪的列,其中多次列出了情绪 - 悲伤、快乐和中性。我需要计算这些情绪在表格中出现的次数,然后以情绪为标签,以次数为条形绘制图表。
以下代码用于提取重复值的数量并将其附加到列表中。下面的代码正确地附加了列表中的值数。截至目前,输出显示了一个包含值的列表 - [6,33,7]
from flask import flask,render_template
import sqlite3
app = flask(__name__)
@app.route("/")
def graph_data():
con = sqlite3.connect('gazemaster.db')
cur = con.cursor()
cur.execute('SELECT COUNT(emotion) FROM GazeData GROUP BY emotion')
values = []
for row in cur.fetchall():
values.append(row[0])
return render_template("graph.html",values = values)
if __name__ == "__main__":
app.run(debug = True)
下面显示的代码是将显示图形输出的 HTML 文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Graph Sample</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="barChart"></canvas>
<script>
var ctx = document.getElementById("barChart").getcontext("2d");
var lineChart = new Chart(ctx,{
type:"bar",data:{
labels: ['Happy','Sad','Neutral'],datasets:[{
label: "Emotion",data: "{{ values | safe }}",backgroundColor: ["#3e95cd","#8e5ea2","#3cba9f"],}]
},})
</script>
</body>
</html>
然而,显示的输出是这样的 -
This is the output shown; it shows only one value when the list clearly is [6,7]
我注意到,如果我添加更多标签,会出现其他值,但这不是我想要的,因为它会将其他标签留空。另外,它将 33 视为 3-3。
我觉得我犯了一个愚蠢的错误,但我无法指出。