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

seaborn scatterplot旋转xticks标签报KeyError解决方法

报错原因

这个KeyError和数据集里的state列名无关,是旧写法的逻辑问题:
seaborn绘制分类x轴时,会自动对分类值去重、按固定规则排序生成刻度,手动把原始数据里整列data['state'](包含所有行的重复州名,长度远大于刻度总数)传给set_xticklabels做标签,内部匹配刻度位置时就会触发索引错误。
而且手动传标签列表的写法本身风险很高,一旦原始数据的分类顺序和轴上生成的顺序不一致,会直接出现标签和数据点错位的问题,很难排查。


无报错的正确实现

不要手动传入标签列表,直接对轴上已经渲染好的刻度设置旋转属性即可,同时搭配对齐、布局调整保证视觉清晰:

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(15, 6))
sns.scatterplot(ax=ax, x='state', y='price per acre, usd', data=data)

ax.set_xlabel("state", size=12)
ax.set_ylabel("average price per acre of land, usd", size=12)
ax.set_title('average prices on industrial land', size=20)

# 核心样式设置
plt.xticks(rotation=45, ha='right')
plt.tight_layout()

plt.show()

效果优化注意点:

  • 必须加ha='right'参数:旋转后的标签默认中心对齐刻度线,视觉上会偏移到刻度右侧,设置右对齐后标签的右上角刚好对准刻度线,完全不会错位。
  • plt.tight_layout()会自动调整画布的底部边距,给旋转后的长标签留出足够显示空间,避免文字被画布边缘截断。
  • 18个州名搭配15宽度的画布+45度旋转完全可以清晰显示,如果觉得文字偏挤,可将旋转角度调整为60度,或把figsize的宽度值加大到18。
  • 不想旋转标签的话,可以直接把x、y轴映射的字段对调,将州名放在y轴,长文本横向显示的可读性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:12:20