如何使用Matplotlib绘制自定义分类进度状态条?
实现思路
这个分类状态进度条本质是单序列堆叠水平条形图,基于Matplotlib实现非常简单,核心步骤如下:
- 用
barh接口绘制堆叠水平条,通过left参数控制每个分段的起始位置 - 为不同状态配置对应的专属配色,对齐通用的状态标识视觉习惯
- 隐藏所有多余坐标轴、刻度,仅保留条形和状态数值标签
- 可以直接导出为png/svg格式,方便在各类报告中复用
完整可运行代码
import matplotlib.pyplot as plt # 输入数据 results = {'pass': 5, 'fail':18, 'na': 10, 'todo': 187, 'blocked': 12, 'aborted': 10} # 自定义状态顺序(可根据需求调整展示优先级) state_order = ['todo', 'blocked', 'aborted', 'na', 'fail', 'pass'] # 状态对应的配色,可自行修改 color_map = { 'pass': '#28a745', 'fail': '#dc3545', 'na': '#ffc107', 'todo': '#6c757d', 'blocked': '#fd7e14', 'aborted': '#17a2b8' } # 初始化画布 fig, ax = plt.subplots(figsize=(14, 2)) current_left = 0 # 遍历绘制每个状态的分段 for state in state_order: count = results[state] # 绘制条形段 ax.barh(y=0, width=count, left=current_left, color=color_map[state], edgecolor='white', height=0.8) # 添加状态+数值标签 ax.text(current_left + count/2, 0, f'{state}\n{count}', ha='center', va='center', color='white', fontweight='bold') current_left += count # 隐藏所有坐标轴元素 ax.axis('off') # 调整边距 plt.tight_layout() # 如需导出图片可取消下一行注释,支持png/svg等格式 # plt.savefig('status_progress.png', dpi=300, bbox_inches='tight') plt.show()
运行上述代码即可生成和参考图效果一致的进度条,你可以根据需求调整配色、尺寸、标签内容和状态顺序。
内容的提问来源于stack exchange,提问作者Snala
相关产品推荐
相关产品推荐

