Python中如何为matplotlib多颜色条形图添加对应图例标签
三色条形图添加自定义图例解决方案
问题原因
单次调用ax.bar()绘制多个不同颜色的条形时,matplotlib会默认将所有条形识别为同一个数据系列,仅会对应一个图例条目,无法自动拆分不同颜色的对应关系,因此原代码中的传参方式无法生成预期的三色色标图例。
解决代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Patch fig = plt.figure() ax = fig.add_subplot() N = 5 ind = np.arange(N) width = 0.5 vals = [] colors = [] add_c=[(1,0),(4,1),(-1,0),(3,0),(2,1)] for v in add_c: vals.append(v[0]) if v[0] == -1: colors.append('r') else: if v[1] == 0: colors.append('b') else: colors.append('g') # 原label参数无效直接删除 ax.bar(ind, vals, width, color=colors) # 手动构造自定义图例句柄 legend_handles = [ Patch(facecolor='r', label='red'), Patch(facecolor='g', label='green'), Patch(facecolor='b', label='blue') ] # 指定图例位置为右上角 ax.legend(handles=legend_handles, loc='upper right') ax.axhline(y = 0, color = 'black', linestyle = '-') plt.show()
核心修改说明
- 新增导入
Patch类,用于构造图例中的自定义颜色块 - 手动定义三种颜色和对应名称的映射关系,生成图例句柄列表
- 调用
ax.legend()时传入自定义句柄,通过loc='upper right'固定图例在右上角位置
内容的提问来源于stack exchange,提问作者OneTouchForHeight
相关产品推荐
相关产品推荐

