Python中如何分离两组柱状图?解决组间紧密重叠问题
解决分组柱状图紧密贴合的问题
嘿,我来帮你搞定这个分组柱状图的间距问题!你的代码里两组柱子挤在一起,核心原因是每个类别(z=1和z=6)分配的空间刚好被5个柱子填满,没有预留组间的空隙。咱们来调整一下位置计算逻辑,轻松把两组分开:
核心思路
给每个分组(z=1/z=6)分配足够容纳5个柱子的空间,同时在分组之间额外预留间隙,避免柱子紧密贴合。
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt # 示例数据(请替换成你的真实数据) Unf1_list = [10, 100] Unf2_list = [20, 200] Unf3_list = [30, 300] Unf4_list = [40, 400] Unf5_list = [50, 500] # 定义关键参数 n_bars_per_group = 5 # 每组的柱子数量 bar_width = 0.2 # 单个柱子宽度 group_gap = 0.3 # 组间间隙,可根据视觉需求调整大小 # 重新计算分组的起始位置,预留组间间隙 X = np.arange(2) * (n_bars_per_group * bar_width + group_gap) # 绘制每组的5个柱子,按顺序偏移位置 plt.bar(X + 0 * bar_width, Unf1_list, color='b', width=bar_width, align='center') plt.bar(X + 1 * bar_width, Unf2_list, color='g', width=bar_width, align='center') plt.bar(X + 2 * bar_width, Unf3_list, color='r', width=bar_width, align='center') plt.bar(X + 3 * bar_width, Unf4_list, color='y', width=bar_width, align='center') plt.bar(X + 4 * bar_width, Unf5_list, color='gray', width=bar_width, align='center') plt.yscale('log') # 将刻度设置在每个分组的中心位置,保证对齐美观 plt.xticks(X + (n_bars_per_group - 1) * bar_width / 2, ['z=1', 'z=6']) plt.show()
为什么这样修改?
- 原来的
X = np.arange(2)给每个分组只分配了1单位的空间,而5个柱子总宽度刚好是5*0.2=1,导致分组之间没有空隙,柱子紧密贴合。 - 现在我们把分组的起始位置步长改为
n_bars_per_group * bar_width + group_gap,既保证每组能放下所有柱子,又额外预留了组间间隙。 - 调整
xticks到分组中心,让刻度和对应分组的位置完美对齐,提升图表可读性。
内容的提问来源于stack exchange,提问作者Ma Y
相关产品推荐
相关产品推荐

