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
相关产品推荐
相关产品推荐

