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

如何去除matplotlib柱状图中x轴数据不连续产生的空白区域

解决方案

问题根源

你传入ax.bar的x参数为数值类型,matplotlib会严格按照数值的实际间隔渲染x轴,因此0和-15之间的14个单位差会表现为空白区域,tight_layout和plt.axis('tight')只会调整子图边距,不会修改轴的数值间隔逻辑,因此无效。


方案1:分类坐标法(最简单,无需额外依赖)

如果你只需要保留对应x值的标签、不需要保留数值轴的实际比例,可以将x轴替换为均匀分布的分类坐标,修改后代码如下:

import matplotlib.pyplot as plt

keys = [0, -15, -16, -17]
values = [3, 5, 2, 1]

# 用索引作为x坐标,保证每个柱子间距均匀
x_pos = range(len(keys))

fig, ax = plt.subplots(ncols=1)
ax.bar(x_pos, values, 0.8, color='g', align='center')

# 替换刻度标签为原数值
ax.set_xticks(x_pos)
ax.set_xticklabels(keys)
plt.setp(ax.xaxis.get_majorticklabels(), rotation=90)

fig.tight_layout()
plt.show()

方案2:断轴法(保留数值轴比例,截断空白区间)

如果需要保留数值轴的实际比例,只剪掉无数据的空白段,可以使用断轴实现,需要先安装brokenaxes依赖:

pip install brokenaxes

修改后代码如下:

import matplotlib.pyplot as plt
from brokenaxes import brokenaxes

keys = [0, -15, -16, -17]
values = [3, 5, 2, 1]

# 配置x轴保留的区间,剪掉-14到-1的空白段,wspace控制断轴缝隙宽度
bax = brokenaxes(xlims=((-17.5, -14.5), (-0.5, 0.5)), wspace=0.05)
bax.bar(keys, values, 0.8, color='g', align='center')
bax.set_xticks(keys)
plt.setp(bax.xaxis.get_majorticklabels(), rotation=90)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:03