如何用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()
关键步骤说明
颜色映射与匹配
先定义一个字典color_map,把每个category和对应颜色绑定,再用df['category'].map(color_map)快速给每个样本分配颜色,这是实现分类着色的核心。绘制带颜色的条形图
调用ax.bar()时,传入color=bar_colors参数即可让每个条形按所属分类显示对应颜色。完善图例
因为axhline已经生成了水平线的图例,所以需要手动创建分类颜色的图例元素(用Patch),再把两者合并到同一个图例里,确保所有信息都清晰展示。其他细节
用figsize调整图表大小,tight_layout()避免标签被截断,这些都是让图表更美观的小技巧。
内容的提问来源于stack exchange,提问作者Square
相关产品推荐
相关产品推荐

