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

为什么sns.relplot绘制的x轴month-year值未按正确顺序排列

问题原因

x轴顺序错乱的核心原因是month-year列在读取后为字符串(object)类型,Seaborn绘图时会默认按照字符串的字典序对x轴类别进行排序,而非你预期的时间先后顺序:

  • 按字典序规则,首字母A开头的Apr-19会排在首字母F开头的Feb-19前面,和实际时间顺序完全不符
  • 跨年份的场景下还会出现Jan-20排在Dec-19前面的排序错误
修复方案

先将该列转换为datetime类型,再绘图即可自动按时间顺序排列x轴:

import pandas as pd
import seaborn as sns
import matplotlib.dates as mdates

# 读取数据、修改列名步骤保持不变
data = pd.read_csv('personal expenses without rent.csv')
data.columns = ['month-year', 'Expenses (USD)', 'unnamed', 'unnamed', 'unnamed', 'unnamed']

# 转换列格式为datetime,匹配%b-%y(月份英文缩写+两位年份)的格式
data['month-year'] = pd.to_datetime(data['month-year'], format='%b-%y')

# 绘图,此时x轴会自动按时间顺序排列
g = sns.relplot(x = 'month-year', y = 'Expenses (USD)', data = data, kind = 'scatter')

# 可选:如果需要x轴仍显示Feb-19这类原始缩写格式,补充以下配置
g.ax.xaxis.set_major_formatter(mdates.DateFormatter('%b-%y'))
# 可选:旋转x轴标签避免文字重叠
g.ax.tick_params(axis='x', rotation=45)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:45:02