为何matplotlib.pyplot.bar有时会显示额外的负X轴值?
问题分析与解决
问题原因
你遇到的X轴显示负数的问题,本质是柱状图默认宽度与X轴数据点间距不匹配:
plt.bar默认柱子宽度为0.8,而你用np.linspace(0,1,len(ncs))生成的X轴点是均匀分布的,当数据量达到200+时,相邻X点的间距仅为1/(len(ncs)-1)(比如265个点的间距约0.0038),远小于柱子默认宽度。- 柱子会向自身X坐标的左右两侧延伸,大量重叠后整体超出了0-1的设定范围,matplotlib会自动扩展X轴以显示所有柱子,最终就出现了负数区域。
解决方案
方案1:适配柱子宽度
手动设置柱子宽度等于X轴点的间距,避免重叠和范围溢出:
cs = np.cumsum(size) ncs = cs / np.max(cs) x = np.linspace(0,1,len(ncs)) width = x[1] - x[0] # 计算相邻X点的间距 plt.bar(x, ncs, width=width, label=r) plt.legend()
方案2:改用折线图(更推荐)
你的数据是累积和的趋势展示,柱状图在数据点极多时并不适合,改用折线图能更清晰呈现趋势,同时不会出现轴范围异常:
cs = np.cumsum(size) ncs = cs / np.max(cs) plt.plot(np.linspace(0,1,len(ncs)), ncs, label=r) plt.legend()
内容的提问来源于stack exchange,提问作者D.Cecchi
相关产品推荐
相关产品推荐

