如何修改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
相关产品推荐
相关产品推荐

