Matplotlib绘图时X轴刻度除以10后全部向0偏移问题求解
问题原因
你混淆了set_xticks()和set_xticklabels()两个方法的作用:
set_xticks()接收的参数是绘图数据在X轴上的实际坐标位置,你最初绘图时X轴传入的是np.arange(1001)也就是01000的原始序列,所以刻度的实际位置必须对应这些原始值,不能直接改成除以10之后的数,不然就相当于把刻度放在了X轴0100的位置,自然会全部往0偏移挤在一起。- 你要修改的只是刻度显示的文本标签,不是刻度的实际位置,应该用
set_xticklabels()方法实现。
正确修改方案
保留原来的刻度位置设置,只把显示的标签做除以10的转换即可:
index_time = len(df.index) ax.plot(np.arange(index_time), df["SoluteHBonds"], color="blue") # 刻度实际位置保持原来的0、50、100...1000,和绘图的X坐标范围匹配 ranges = np.arange(0, index_time, 50) ax.set_xticks(ranges) # 仅修改刻度显示的文本,做除以10的转换 ax.set_xticklabels(ranges / 10)
之前修改失效的具体逻辑
- 第一次你把
np.true_divide(ranges, 10)传给了set_xticks(),相当于把刻度放在了X轴0、5、10...100的位置,而你的图X轴实际范围是0~1000,所以所有刻度都堆在最左边1/10的区域,就是你观察到的向0偏移。 - 第二次你生成的
lst_range是0、5、10...100,除以10之后变成0、0.5、1...10,传给set_xticks()之后刻度全挤在X轴最左侧0~10的位置,偏移更严重。
内容的提问来源于stack exchange,提问作者Roherdris
相关产品推荐
相关产品推荐

