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

matplotlib绘制barplot时为指定柱标签设置对应颜色及正确图例

问题根源

原有代码的bug来自两处:

  • 遍历df.Types的每个元素时,每次都调用ax.bar()绘制全量6根柱子,相当于整组柱形被重复绘制了6次,只是图层重叠肉眼看不出,但属于冗余绘制
  • 每次重复绘制时都传入了分组label参数,同一个分组标签被多次注册到图例中,最终出现大量重复的图例条目
修复方案

不需要循环重复绘图,先给每个柱子匹配好对应颜色,单次完成柱形绘制后手动生成分组图例即可,可直接运行的修复后代码如下:

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

mdict = {"Types": ["A", "B", "C", "D", "F", "G"], "Count": [3, 4, 5, 6, 7, 6]}
df = pd.DataFrame(mdict)

fig, ax = plt.subplots(figsize=(15, 8))

# 建立标签到颜色的映射关系
type_color_rule = {
    "A": "red", "B": "red",
    "C": "green", "D": "green",
    "F": "blue", "G": "blue"
}
# 按顺序生成每个柱子对应的颜色列表
bar_color_list = [type_color_rule[item] for item in df.Types]

# 单次绘制全部柱形,避免重复绘制
ax.bar(df.Types, df.Count, color=bar_color_list)

# 自定义图例项,匹配三类分组的颜色和名称
legend_items = [
    Patch(facecolor="red", label="Type 1"),
    Patch(facecolor="green", label="Type 2"),
    Patch(facecolor="blue", label="Type 3")
]
ax.legend(handles=legend_items)

plt.show()
实现效果
  • 柱形仅绘制一次,无冗余图层
  • A、B柱显示为红色,对应Type 1;C、D柱显示为绿色,对应Type 2;F、G柱显示为蓝色,对应Type 3
  • 图例仅展示3个分组条目,无重复项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.13 16:15:54