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

Seaborn lineplot X轴显示1970年错误日期,如何修正为正确日期?

解决Seaborn Lineplot X轴日期显示错误的问题

问题原因

你的Date列大概率是字符串类型,而非Python的datetime类型。Seaborn会将字符串列视为分类变量,用0、1、2这类索引值绘制X轴,而mdates.DateFormatter会把这些索引值解析为Unix时间戳(从1970-01-01开始的秒数),因此出现了错误的1970年日期。

修复步骤

1. 转换Date列为datetime类型

在绘图前先处理数据类型:

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

# 将字符串格式的Date列转为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

2. 明确指定X轴与Y轴,绘制正确的线图

原代码未指定x参数,Seaborn默认用DataFrame索引作为X轴,需要明确传入x='Date',同时可以通过两种方式处理多Y轴数据:

方法一:转为长格式绘制(推荐,适配多列Y轴)

# 把宽格式数据转为长格式,方便Seaborn识别分类
df_melted = df.melt(id_vars='Date', value_vars=['A', 'B'], var_name='类别', value_name='数值')

# 绘制线图
plot = sns.lineplot(data=df_melted, x='Date', y='数值', hue='类别')

# 设置日期显示格式
format_ymd = mdates.DateFormatter('%Y-%m-%d')
plot.xaxis.set_major_formatter(format_ymd)

plt.xticks(rotation=45)
plt.tight_layout()  # 防止日期标签被截断
plt.show()

方法二:分别绘制两条线

# 单独绘制A、B两条线,共享同一轴
plot = sns.lineplot(data=df, x='Date', y='A', label='A')
sns.lineplot(data=df, x='Date', y='B', label='B', ax=plot)

# 设置日期显示格式
format_ymd = mdates.DateFormatter('%Y-%m-%d')
plot.xaxis.set_major_formatter(format_ymd)

plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

3. 验证类型转换结果

可以打印数据类型确认转换是否成功:

print(df.dtypes)

正确输出应类似:

Date    datetime64[ns]
A             float64
B             float64
dtype: object

核心注意点

  • 日期列必须是datetime类型,而非字符串
  • 绘图时必须明确指定x='Date',让Seaborn识别X轴为日期数据
  • plt.tight_layout()可以避免旋转后的日期标签被图表边缘遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:30:07