如何在Matplotlib中实现条形间距不同的四对分组直方图?
在Matplotlib中实现分组间距不同的条形图
要做出你需要的“组内条形紧凑、组与组之间间距更大”的条形图,核心是手动指定每个条形的x轴位置,而非依赖Matplotlib的默认布局。下面是具体实现步骤和代码:
步骤说明
- 先定义每组的中心x坐标,组与组之间预留较大间隔;
- 在每组内部,给两个条形设置相对于组中心的小偏移量,保证组内紧凑;
- 基于自定义的x坐标绘制条形,最后对齐x轴刻度与组名。
完整代码示例
import matplotlib.pyplot as plt import numpy as np # 定义数据 groups = ["组1", "组2", "组3", "组4"] series1_data = [12, 18, 15, 20] series2_data = [8, 14, 10, 16] # 配置间距参数 group_spacing = 2 # 组与组之间的间隔(x轴单位) intra_group_gap = 0.3 # 组内两个条形的间隔 bar_width = 0.3 # 单个条形的宽度 # 计算每组的中心x位置 group_centers = np.arange(len(groups)) * (1 + group_spacing) # 计算每组内两个条形的x位置 bar1_x = group_centers - intra_group_gap / 2 bar2_x = group_centers + intra_group_gap / 2 # 绘制条形 plt.bar(bar1_x, series1_data, width=bar_width, label="系列1") plt.bar(bar2_x, series2_data, width=bar_width, label="系列2") # 设置x轴刻度与标签 plt.xticks(group_centers, groups) # 添加图例与标签 plt.legend() plt.title("分组间距自定义条形图") plt.xlabel("组别") plt.ylabel("数值") plt.tight_layout() plt.show()
调整技巧
- 修改
group_spacing可以控制组间的宽松程度,数值越大,组与组之间的空隙越宽; - 调整
intra_group_gap和bar_width可以优化组内条形的紧凑度,注意bar_width不要超过intra_group_gap,避免条形重叠; - 如果需要每组包含更多条形,只需扩展
bar_x的计算逻辑即可(比如三组条形就设置三个偏移量)。
内容的提问来源于stack exchange,提问作者f. c.
相关产品推荐
相关产品推荐

