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

Matplotlib set_yticklabels偏移:为何标签显示不符合预期?

为啥你的y轴标签错位还丢了'a'?

嘿,这个问题我之前调试代码时也踩过坑!核心原因是你直接设置yticklabels但没同步指定yticks的位置,导致标签和条形图的位置完全对不上。

具体来说,你用y = np.arange(len(x))生成了[0,1,2,3]这几个条形图的y轴位置,但Matplotlib默认的yticks刻度不一定刚好是这几个值。当你直接覆盖yticklabels时,标签会被绑定到当前默认的刻度上——比如默认可能只生成了1、2、3这三个刻度,那你的四个标签里,'a'找不到对应的刻度就被隐藏了,剩下的'b'、'c'、'd'自然就整体下移到1、2、3的位置上,看起来就全错位了。

两种快速修复方案

方案一:先定刻度位置,再贴标签

先把yticks设置成你条形图对应的y轴位置,再给每个刻度绑定标签,这样就能一一对应了:

import matplotlib.pyplot as plt
import numpy as np
x = [1.0, 1.1, 2.0, 5.7]
y = np.arange(len(x))
fsize=(2,2)
fig, ax = plt.subplots(1,1,figsize=fsize)
# 关键:先指定刻度位置,再设置标签
ax.set_yticks(y)
ax.set_yticklabels(['a','b','c','d'])
ax.barh(y,x,align='center',color='grey')
plt.show()

方案二:绘制条形图时直接绑定标签(更简洁)

调用barh的时候,直接用tick_label参数把标签和条形图绑定,一步到位省得单独设置:

import matplotlib.pyplot as plt
import numpy as np
x = [1.0, 1.1, 2.0, 5.7]
y_labels = ['a','b','c','d']
y = np.arange(len(y_labels))
fsize=(2,2)
fig, ax = plt.subplots(1,1,figsize=fsize)
# 绘制时直接关联标签
ax.barh(y,x,align='center',color='grey', tick_label=y_labels)
plt.show()

小提醒

以后设置自定义刻度标签时,一定要记得先确认刻度位置和你的数据位置匹配,不然很容易出现这种错位或者丢失的情况哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:58