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

matplotlib绘制分组柱状图时如何调整各组之间的间隔距离

问题原因

你当前代码里手动设置的柱子偏移没有给指标组之间预留足够空白:5根柱子单根宽0.15,偏移从-0.2到+0.6总跨度达0.8,相邻两组的柱子首尾间距仅0.05,几乎贴在一起,加上整组柱子没有和x轴刻度居中对齐,很容易出现不同组柱体混杂的问题。

调整方案

不要手动硬编码柱子偏移量,通过「固定组间空白→自动计算柱宽→自动生成偏移量」的逻辑实现,后续调整空隙大小也更方便:

  • 先定义组间要留的空白宽度,自动计算适配的单根柱子宽度
  • 计算每个系列柱子的偏移量,让每个指标对应的整组柱子居中对齐到该指标的x刻度位置
  • 保留x轴刻度和组中心对齐即可

调整后的可运行代码:

import numpy as np
import matplotlib.pyplot as plt

metrics = ['accuracy', 'precision', 'recall','f1_score', 'roc_auc_score']
n_metric_groups = len(metrics)
n_model_bars = 5
group_gap = 0.35  # 组间空白宽度,数值越大空隙越大,可按需调整
bar_width = (1 - group_gap) / n_model_bars
x = np.arange(n_metric_groups)

RF = [0.62, 0.59, 0.62, 0.57, 0.78]
SMOTE = [0.63, 0.62, 0.63, 0.60, 0.79]
AdaBoost = [0.27, 0.42, 0.27, 0.28, 0.58]
SMOTEBoost = [0.54, 0.60, 0.54, 0.57, 0.68]
decoc = [0.63, 0.61, 0.63, 0.58, 0.69]

# 自动计算每个系列柱子的偏移,保证整组居中
bar_offsets = np.arange(n_model_bars) * bar_width - (n_model_bars * bar_width / 2 - bar_width/2)

plt.bar(x + bar_offsets[0], RF, width=bar_width, label='RF')
plt.bar(x + bar_offsets[1], SMOTE, width=bar_width, label='SMOTE')
plt.bar(x + bar_offsets[2], AdaBoost, width=bar_width, label='AdaBoost')
plt.bar(x + bar_offsets[3], SMOTEBoost, width=bar_width, label='SMOTEBoost')
plt.bar(x + bar_offsets[4], decoc, width=bar_width, label='DECOC')

plt.xticks(x, metrics)
plt.legend(loc='best')
plt.ylim(0.0, 1.2)
plt.title('Performance Evaluation')
plt.xlabel('Performance Metrics')
plt.tight_layout()
plt.show()

如果需要调整空隙大小,直接修改group_gap的数值即可:比如设为0.4时间距会更宽,设为0.2时间距更窄,柱子宽度会自动适配,不需要手动改其他偏移参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:06