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

如何调整Matplotlib柱状图xticks刻度按指定数值区间划分显示

实现方案

你之前的写法错误点在于:把柱形放在了range(len(x_data))生成的序列索引位置,此时x轴的坐标是0、1、2……的位置序号,不是x_data对应的真实数值,所以MultipleLocator(100)会按每100个序号间隔生成刻度,自然达不到按数值区间划分的效果。

直接把柱形的x坐标替换为真实的x_data数值,再配置刻度定位器就能实现需求,参考代码:

import matplotlib.pyplot as plt
from matplotlib import ticker
import numpy as np

# 替换为你的实际数据
x_data = np.array([1,2,5,100,250,600,1000])
y_data = np.array([5,3,7,2,9,4,6])

fig, ax = plt.subplots()
# 柱形x坐标直接用真实x值,width参数根据显示效果调整,避免柱形过宽重叠
bar1 = ax.bar(x_data, y_data, width=8, color='g', align='center')
# 设置x轴主刻度间隔为100
ax.xaxis.set_major_locator(ticker.MultipleLocator(100))
# 可选:调整x轴范围,避免边缘柱形被截断
ax.set_xlim(left=0, right=((x_data.max() // 100) + 1) * 100)

plt.show()

效果逻辑

  • x值落在(0,100)区间的柱形会自动排布在0和100两个刻度之间
  • x值落在(100,200)区间的柱形会排布在100和200刻度之间,后续区间规则一致
  • 如果柱形显示过宽/过窄,直接修改bar()的width参数即可,小跨度数值场景下设为5-10比较合适

适配优化

如果你的x_data跨度非常大(比如从个位数到几万),固定100间隔的刻度会在大数值区域过于密集,可以换成对数刻度ticker.LogLocator(),或者自定义刻度列表传入ax.set_xticks()适配显示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:45:48