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

如何用Matplotlib绘制带分类颜色的误差条形图并添加±σ水平线?

实现带分类颜色的误差条形图(含±σ参考线)

直接上完整可运行的代码,你可以替换成自己的DataFrame直接使用:

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.patches import Patch

# 构造你的示例数据(实际使用时替换成自己的DataFrame)
data = {
    'error': [0.1, 0.4, 0.1, -0.2, -0.1],
    'sample_id': [1, 2, 3, 4, 5],
    'category': ['A', 'A', 'B', 'B', 'C']
}
df = pd.DataFrame(data)

# 给每个分类分配专属颜色,可根据喜好自定义
color_map = {
    'A': '#1f77b4',  # 蓝色
    'B': '#ff7f0e',  # 橙色
    'C': '#2ca02c'   # 绿色
}
# 为每个样本匹配对应的颜色
bar_colors = df['category'].map(color_map)

# 创建绘图对象
fig, ax = plt.subplots(figsize=(8, 4))

# 绘制带分类颜色的误差条形图
ax.bar(df['sample_id'], df['error'], color=bar_colors)

# 添加±σ水平线(σ=0.3)
sigma = 0.3
ax.axhline(y=sigma, color='red', linestyle='--', label=f'+σ ({sigma})')
ax.axhline(y=-sigma, color='red', linestyle='--', label=f'-σ ({-sigma})')

# 设置图表标签和标题
ax.set_xlabel('样本ID')
ax.set_ylabel('误差值 (target - prediction)')
ax.set_title('样本误差分布(按分类着色)')

# 添加分类颜色的图例(因为默认图例只显示水平线,手动补充分类图例)
legend_elements = [Patch(facecolor=color_map[cat], label=cat) for cat in color_map]
ax.legend(handles=legend_elements + ax.get_legend_handles_labels()[0], loc='upper right')

# 自动调整布局,避免标签被截断
plt.tight_layout()
plt.show()

关键步骤说明

  1. 颜色映射与匹配
    先定义一个字典color_map,把每个category和对应颜色绑定,再用df['category'].map(color_map)快速给每个样本分配颜色,这是实现分类着色的核心。

  2. 绘制带颜色的条形图
    调用ax.bar()时,传入color=bar_colors参数即可让每个条形按所属分类显示对应颜色。

  3. 完善图例
    因为axhline已经生成了水平线的图例,所以需要手动创建分类颜色的图例元素(用Patch),再把两者合并到同一个图例里,确保所有信息都清晰展示。

  4. 其他细节
    用figsize调整图表大小,tight_layout()避免标签被截断,这些都是让图表更美观的小技巧。

内容的提问来源于stack exchange,提问作者Square

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:54:37