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

如何消除Matplotlib中两个条形图之间的间距?

解决Matplotlib条形图前两个条形间距过大的问题

你的问题根源在于条形的位置由x数组直接决定,你设置的x = [0,15,20,25]本身就存在巨大间距(0到15差15,远大于条形宽度2.5),手动设置plt.xticks只是改变刻度显示,不会调整条形的位置。

最简单的解决方法:用连续索引定位条形,再替换刻度标签

把条形的位置换成连续的整数索引,然后通过plt.xticks把刻度显示为你需要的数值,这样所有条形会自动等间距排列:

import matplotlib.pyplot as plt
import numpy as np

# 用连续索引作为条形的位置(0,1,2,3)
x_positions = np.arange(4)
y = np.array([3500, 4239, 5239, 6239])
# 你想要显示的x轴刻度标签
x_labels = [0, 15, 20, 25]

plt.bar(x_positions, y, width=0.6, edgecolor='black', 
        color=['olive', 'seagreen', 'green', 'darkgreen'])

# 设置刻度位置为条形位置,标签为自定义数值
plt.xticks(x_positions, x_labels)

# 给legend加上标签(原代码没加会显示空框)
plt.legend(['数据'])
plt.grid(color='slategrey', linestyle='--', linewidth=0.15)

plt.show()

为什么原代码会出现间距问题?

plt.bar(x, y)中,x的每个值是对应条形的中心位置。你设置的第一个条形中心在0,第二个在15,两者间距15,而条形宽度只有2.5,所以中间必然出现大空隙;后面的条形中心间距是5,和宽度2.5搭配,空隙就小很多。

另一种(不推荐)的调整方式:修改x数组的数值

如果你非要保留原x数值的意义,可以手动调整第一个条形的位置,让它和第二个的间距等于条形宽度:

# 修改x数组,让第一个条形中心和第二个的间距为2.5
x = np.array([12.5, 15, 20, 25])
y = np.array([3500, 4239, 5239, 6239])

plt.bar(x, y, width=2.5, edgecolor='black', 
        color=['olive', 'seagreen', 'green', 'darkgreen'])

plt.xticks([0,15,20,25])  # 依然显示原刻度
plt.legend(['数据'])
plt.grid(color='slategrey', linestyle='--', linewidth=0.15)

plt.show()

这种方法会让x轴刻度和条形位置不对应,容易造成误解,所以更推荐第一种方案。

内容的提问来源于stack exchange,提问作者H. K. Mahedi Azad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:18