from matplotlib import rcParams, pyplot as plt from sqlalchemy import func from orm import db_session, Sample # 创建全局绘图对象和轴 fig, ax = plt.subplots(figsize=(8, 5)) plt.ion() # 启用交互模式 def visualize_progress(): """ 可视化 `is_done_flag` 的分布,动态更新进度条。 """ # 设置全局字体 rcParams['font.family'] = 'Microsoft YaHei' # 黑体,适用于中文 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]] # 清空之前的绘图内容 ax.clear() # 创建柱状图 ax.bar(labels, values, color=['red', 'orange', 'green']) ax.set_title('任务进度分布', fontsize=16) ax.set_xlabel('任务状态', fontsize=14) ax.set_ylabel('数量', fontsize=14) ax.tick_params(axis='both', labelsize=12) # 显示具体数量 for i, v in enumerate(values): ax.text(i, v + 0.5, str(v), ha='center', fontsize=12) # 刷新绘图 plt.pause(3) # 暂停一段时间以更新图表 # 关闭窗口时,停止交互模式 # plt.ioff() visualize_progress()