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

Matplotlib柱状图:单柱标签添加、组标签保留及图例实现方法

当然可以实现你想要的效果!我帮你整理了完整的方案,既能给单个柱子添加垂直标签、保留主分组标签,还能生成对应颜色的图例,下面是详细实现步骤和代码:

完整实现方案

1. 核心思路

  • 用分组柱状图的方式绘制不同颜色的柱子(红、绿、蓝),调整柱子宽度避免重叠
  • 在每个柱子底部添加垂直旋转的标签,解决重叠问题
  • 将主分组标签(A、B、C、D)设置在每组柱子的中心位置
  • 通过自定义图例元素匹配柱子颜色和标签

2. 完整代码实现

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Patch

# 创建画布和坐标轴
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111)

# 配置基本参数
n_groups = 4
bar_width = 0.25  # 调整宽度让三组柱子在一个分组内不重叠
opacity = 0.7
index = np.arange(n_groups)  # 主分组的x轴位置

# 模拟每组的三个柱子数据(你可以替换成自己的真实数据)
red_data = [10, 12, 15, 8]
green_data = [8, 10, 12, 9]
blue_data = [12, 9, 11, 14]

# 绘制三组不同颜色的柱状图
red_bars = ax.bar(index - bar_width, red_data, bar_width, alpha=opacity, color='red')
green_bars = ax.bar(index, green_data, bar_width, alpha=opacity, color='green')
blue_bars = ax.bar(index + bar_width, blue_data, bar_width, alpha=opacity, color='blue')

# 定义函数:为单个柱子添加垂直标签(位于柱子下方)
def add_individual_bar_labels(bars, label_text):
    for bar in bars:
        # 计算标签的位置:柱子底部中心,y轴位置设为-1.5(可根据你的数据范围调整)
        x_pos = bar.get_x() + bar.get_width() / 2
        y_pos = -1.5
        ax.text(x_pos, y_pos, label_text,
                ha='center', va='top', rotation=90, fontsize=10)

# 给三组柱子分别添加标签
add_individual_bar_labels(red_bars, 'red')
add_individual_bar_labels(green_bars, 'green')
add_individual_bar_labels(blue_bars, 'blue')

# 设置主分组的x轴标签(A、B、C、D)
ax.set_xticks(index)
ax.set_xticklabels(['A', 'B', 'C', 'D'], fontsize=12)

# 调整y轴范围,避免底部标签被截断
max_value = max(max(red_data), max(green_data), max(blue_data))
ax.set_ylim(0, max_value + 2)

# 创建并添加颜色图例
legend_elements = [
    Patch(facecolor='red', alpha=opacity, label='red'),
    Patch(facecolor='green', alpha=opacity, label='green'),
    Patch(facecolor='blue', alpha=opacity, label='blue')
]
ax.legend(handles=legend_elements, loc='upper right')

# 添加标题和轴标签
ax.set_ylabel('Value', fontsize=11)
ax.set_title('Grouped Bars with Individual Vertical Labels', fontsize=13)

# 自动调整布局,避免元素重叠
plt.tight_layout()
plt.show()

3. 关键细节说明

  • 柱子宽度调整:用bar_width=0.25让三组柱子在一个主分组内紧凑排列,不会互相重叠
  • 垂直标签位置:通过rotation=90设置垂直显示,y_pos=-1.5把标签放在柱子下方,你可以根据自己的数据范围调整这个值
  • 主分组标签:ax.set_xticks(index)把刻度放在每组柱子的中心,完美对应A/B/C/D标签
  • 图例创建:用Patch对象手动创建图例元素,确保颜色和标签与柱子完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:24