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

Python中如何用matplotlib绘制含单组堆叠的分组柱状图

实现方案

需要手动分配每组柱的横轴偏移位置,分步绘制堆叠段和独立柱,可完全匹配你之前使用的配色规则,完整实现代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 基础绘图配置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示乱码,可根据自身系统字体替换
plt.rcParams['axes.unicode_minus'] = False
years = df.index.tolist()  # 对应2015-2022的年份索引
x = np.arange(len(years))  # 生成年份对应的横轴基准坐标
total_group_width = 0.8  # 同一年份下三组柱的总占用宽度
single_bar_width = total_group_width / 3  # 每组柱的单独宽度

# 对齐你原有配色:煤炭、油气、核电、可再生能源、储能、电网
color_config = {
    "煤炭": "black",
    "油气": "gray",
    "核电": "red",
    "可再生能源": "green",
    "储能": "blue",
    "电网": "yellow"
}

fig, ax = plt.subplots(figsize=(10, 6))

# 绘制第一组:发电板块堆叠柱,位置在基准点向左偏移一个单柱宽度
power_columns = ["煤炭", "油气", "核电", "可再生能源"]
stack_bottom = np.zeros(len(years))  # 堆叠初始底部高度为0
for col in power_columns:
    ax.bar(
        x - single_bar_width,
        df[col],
        single_bar_width,
        label=col,
        bottom=stack_bottom,
        color=color_config[col]
    )
    stack_bottom += df[col]  # 更新下一段堆叠的底部基准高度

# 绘制第二组:储能独立柱,位置与横轴基准点对齐
ax.bar(
    x,
    df["储能"],
    single_bar_width,
    label="储能",
    color=color_config["储能"]
)

# 绘制第三组:电网独立柱,位置在基准点向右偏移一个单柱宽度
ax.bar(
    x + single_bar_width,
    df["电网"],
    single_bar_width,
    label="电网",
    color=color_config["电网"]
)

# 坐标轴与图例配置
ax.set_xticks(x)
ax.set_xticklabels(years)
ax.legend()
plt.tight_layout()
plt.show()
  • 如需调整组间空隙,直接修改total_group_width参数即可,数值越小组间距越大
  • 发电板块的堆叠逻辑和你之前全量堆叠图的对应部分效果完全一致,不会出现视觉断层
  • 如果中文显示异常,替换font.sans-serif参数为本地系统已安装的中文字体名称即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:54:27