You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:15:02