49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from matplotlib import rcParams, pyplot as plt
|
|
from sqlalchemy import func
|
|
|
|
from orm import db_session, Sample
|
|
|
|
|
|
def visualize_progress():
|
|
"""
|
|
可视化 `is_done_flag` 的分布。
|
|
"""
|
|
|
|
# 设置全局字体
|
|
rcParams['font.family'] = 'SimHei' # 黑体,适用于中文
|
|
rcParams['font.size'] = 12
|
|
|
|
# 查询数据库中各 is_done_flag 的数量
|
|
result = db_session.query(
|
|
Sample.is_done_flag, func.count(Sample.id)
|
|
).group_by(Sample.is_done_flag).all()
|
|
|
|
# 转换为字典
|
|
data = {flag: count for flag, count in result}
|
|
|
|
# 填充缺失的标志为 0
|
|
for flag in [-1, 0, 1]:
|
|
data.setdefault(flag, 0)
|
|
|
|
# 准备数据
|
|
labels = ['未完成 (-1)', '完成(0)', '等待 (1)']
|
|
values = [data[-1], data[0], data[1]]
|
|
|
|
# 创建柱状图
|
|
plt.figure(figsize=(8, 5))
|
|
plt.bar(labels, values, color=['red', 'orange', 'green'])
|
|
plt.title('任务进度分布', fontsize=16)
|
|
plt.xlabel('任务状态', fontsize=14)
|
|
plt.ylabel('数量', fontsize=14)
|
|
plt.xticks(fontsize=12)
|
|
plt.yticks(fontsize=12)
|
|
|
|
# 显示具体数量
|
|
for i, v in enumerate(values):
|
|
plt.text(i, v + 0.5, str(v), ha='center', fontsize=12)
|
|
|
|
# 显示图表
|
|
plt.tight_layout()
|
|
plt.show()
|
|
|
|
visualize_progress() |