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

Matplotlib图表图例显示异常求助及bar_labels作用咨询

问题解答:Matplotlib 3.6柱状图图例异常及bar_labels参数说明

一、图例显示异常原因及解决办法

你碰到的图例仅显示红色一项的问题,核心原因是Matplotlib 3.6及更早版本不支持通过ax.bar()的label参数传入列表自动合并相同图例项——这个合并功能是Matplotlib 3.7版本才新增的特性。在3.6版本中,直接给label传列表,只会识别第一个非下划线开头的有效标签(以_开头的标签会被Matplotlib判定为隐藏标签),所以最终只显示了"red"这一项。

两种可行的解决方式:

  1. 升级Matplotlib到3.7及以上版本:升级后直接运行原代码,就能得到预期的合并图例效果。
  2. 手动创建图例条目(适合不愿升级的场景):通过自定义Patch对象生成对应颜色的图例,代码示例如下:
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

fig, ax = plt.subplots()
fruits = ['apple', 'blueberry', 'cherry', 'orange']
counts = [40, 100, 30, 55]
bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange']

bars = ax.bar(fruits, counts, color=bar_colors)

ax.set_ylabel('fruit supply')
ax.set_title('Fruit supply by kind and color')

# 手动去重生成图例元素
legend_elements = [
    Patch(facecolor='tab:red', label='red'),
    Patch(facecolor='tab:blue', label='blue'),
    Patch(facecolor='tab:orange', label='orange')
]
ax.legend(handles=legend_elements, title='Fruit color')

plt.show()

二、bar_labels参数的作用

代码里的bar_labels是用来定义每个柱子的标签文本的,但默认不会直接显示在图表上。它的核心作用是配合ax.bar_label()函数,给每个柱子添加标注(比如在柱子上方显示标签或数值)。举个例子,在ax.bar()之后添加以下代码,就能显示这些标签:

ax.bar_label(bars, labels=bar_labels)

注:以_开头的标签会被bar_label自动去掉下划线,所以_red会显示为red。

效果对比

  • 预期效果图:
    预期柱状图图例效果
  • 实际效果图(Matplotlib 3.6):
    实际柱状图图例效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:15:45