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

如何修改Matplotlib堆叠柱状图代码实现分组柱状图?

将Matplotlib堆叠柱状图改为分组柱状图的核心修改点
  • 设置统一柱子宽度:先定义一个固定的柱子宽度,比如 bar_width = 0.35,为多个系列的柱子预留并排摆放的空间。
  • 计算分组偏移的x坐标:原来堆叠图使用同一组x轴坐标,现在要给每个系列的柱子计算偏移后的位置。比如基础x轴坐标为 x = np.arange(len(category_labels)),第一个系列用 x,第二个系列用 x + bar_width,第三个系列用 x + 2*bar_width,以此类推。
  • 移除堆叠专用的bottom参数:堆叠图中会通过bottom指定上一个系列的顶部作为当前柱子的底部,分组图不需要这个参数,直接调用plt.bar()绘制每个系列即可。
  • 将x轴刻度对齐到分组中心:调整x轴刻度的位置到每组柱子的中间,比如 plt.xticks(x + bar_width/2, category_labels),保证刻度与分组位置对应。
  • 示例代码对比:
    原堆叠图代码片段:
    import matplotlib.pyplot as plt
    import numpy as np
    
    categories = ["A", "B", "C"]
    data1 = [10, 20, 15]
    data2 = [5, 15, 10]
    
    x = np.arange(len(categories))
    plt.bar(x, data1, label="系列1")
    plt.bar(x, data2, bottom=data1, label="系列2")  # 堆叠核心参数bottom
    plt.xticks(x, categories)
    plt.legend()
    plt.show()
    
    修改后的分组图代码片段:
    import matplotlib.pyplot as plt
    import numpy as np
    
    categories = ["A", "B", "C"]
    data1 = [10, 20, 15]
    data2 = [5, 15, 10]
    
    bar_width = 0.35
    x = np.arange(len(categories))
    plt.bar(x, data1, width=bar_width, label="系列1")
    plt.bar(x + bar_width, data2, width=bar_width, label="系列2")  # 用x轴偏移替代bottom
    plt.xticks(x + bar_width/2, categories)  # 刻度移到分组中间
    plt.legend()
    plt.show()
    
  • 可选优化:如果分类名称较长,可添加plt.xticks(rotation=45)旋转标签避免重叠;若系列数量较多,可适当减小bar_width值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02