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

如何使用matplotlib创建同组同色、柱带标签无图例的分组柱状图

Matplotlib 分组柱状图自定义实现方案

针对「同分组柱体同色、移除默认图例、柱体添加数值标签」的需求,可直接通过以下代码实现:

import matplotlib.pyplot as plt
import pandas as pd
  
# 构造源数据
df = pd.DataFrame([['A', 10, 20, 10, 30], ['B', 20, 25, 15, 25], ['C', 12, 15, 19, 6],
                   ['D', 10, 29, 13, 19]],
                  columns=['Team', 'Round 1', 'Round 2', 'Round 3', 'Round 4'])

# 为每个Team配置统一展示颜色
team_colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']
bar_per_team = len(df.columns) - 1 # 每个Team对应的柱体数,即轮次数量

# 绘制基础分组柱图,直接关闭默认图例
ax = df.plot(
    x='Team',
    kind='bar',
    stacked=False,
    title='Grouped Bar Graph with unified team color',
    legend=False,
    figsize=(8, 5)
)

# 批量设置柱体颜色+添加数值标签
for bar_idx, bar in enumerate(ax.patches):
    # 按每bar_per_team个柱为一个Team分组,匹配对应颜色
    current_team = bar_idx // bar_per_team
    bar.set_color(team_colors[current_team])
    # 柱顶添加数值标签
    height = bar.get_height()
    ax.text(
        bar.get_x() + bar.get_width()/2,
        height + 0.4,
        f"{height}",
        ha='center',
        va='bottom'
    )

# 调整布局避免元素截断
plt.tight_layout()
plt.show()

核心实现逻辑

  • 同组同色:pandas 生成的非堆叠分组柱状图,柱体排列顺序为「所有Team的第1轮柱→所有Team的第2轮柱→...→最后一轮柱」,因此每bar_per_team个柱属于同一Team,按索引切片分组赋色即可。
  • 移除图例:调用df.plot()时传入legend=False参数,可直接关闭默认生成的多色图例,无需后续手动删除。
  • 数值标签:遍历轴内所有柱形patch,获取每个柱的水平居中位置、顶部高度,在柱顶上方少量偏移位置添加数值文本,偏移量可根据数据量级自行调整避免重叠。

内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:34:03