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

调整温度异常数据绘图的日期格式与X轴刻度标签

解决Matplotlib日期轴仅显示1970-1975年份的问题

问题背景

用Pandas的read_csv()读取了1881-2022年的月温度异常CSV文件,通过skipfooter=3排除2022年最后3个月的-999无效值,日期格式为yyyy-mm-dd。绘图时X轴每年重复显示12个年份刻度,尝试用YearLocator设置仅按年份显示刻度后,却只出现1970-1975年的年份标签,需要解决这个问题。

问题根源

你的代码里dates列是字符串类型,matplotlib无法直接识别为日期对象,导致YearLocator只能解析到默认的时间纪元(1970年)附近的日期,所以只显示了1970-1975的年份。

修正后的代码

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.dates import YearLocator, MonthLocator, DateFormatter
import matplotlib.dates as mdates

# 读取CSV时直接解析Date列为datetime类型,同时跳过最后3行
ds = pd.read_csv('path_to_file.csv', 
                 header='infer', 
                 engine='python', 
                 skipfooter=3,
                 parse_dates=['Date'])  # 关键:自动解析日期列

# 提取日期和温度异常数据(注意列名的空格,建议重命名简化)
dates = ds['Date']
tAnoms = ds[' Berkeley Earth 2m Air Temperature (degree C) 0N-90N;0E-360E']
# 可选:给列重命名,后续代码更简洁
# ds.rename(columns={' Berkeley Earth 2m Air Temperature (degree C) 0N-90N;0E-360E': 'temp_anomaly'}, inplace=True)
# tAnoms = ds['temp_anomaly']

fig = plt.figure(figsize=(10, 6))  # 调整画布比例更合理
ax = plt.subplot(111)

# 绘制原始数据和滚动平均
ax.plot(dates, tAnoms, label='月温度异常')
ax.plot(dates, tAnoms.rolling(60, center=True).mean(), label='60个月滚动平均', linewidth=2)

# 设置主刻度为每年1月,格式化为年份
ax.xaxis.set_major_locator(mdates.YearLocator(month=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))

# 可选:添加月份次要刻度,增强可读性
ax.xaxis.set_minor_locator(mdates.MonthLocator())

# 添加图例、标题和轴标签
ax.legend()
ax.set_ylabel('温度异常 (°C)')
ax.set_xlabel('年份')
ax.set_title('1881-2022年北半球月温度异常')

# 自动旋转X轴标签,避免重叠
plt.xticks(rotation=45)
plt.tight_layout()  # 调整布局,防止标签被截断

plt.show()

关键修正点

  • 读取CSV时添加parse_dates=['Date'],将字符串格式的日期直接解析为datetime64类型,让matplotlib能正确识别全时段的日期。
  • 可选:给过长的温度异常列名重命名,简化代码维护。
  • 添加了图例、轴标签和标题,优化图表可读性;旋转X轴标签并使用tight_layout()避免标签截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:50:36