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
相关产品推荐
相关产品推荐

