如何消除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
相关产品推荐
相关产品推荐

