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

绘制带时区Timestamp数据时Matplotlib X轴刻度异常问题及解决

解决带时区Timestamp导致X轴出现多余日期刻度的问题

问题根源

你遇到的X轴出现不存在的27-01-2018刻度,核心原因是你的date字段是带时区的Timestamp(后缀+11:00)。matplotlib在解析这类带时区的时间数据时,时区偏移会让底层日期计算出现偏差,最终生成了数据里没有的额外刻度。

快速解决方案

移除日期字段的时区信息,让matplotlib能精准匹配你数据中的日期值:

  1. 先处理date列,剥离时区属性:
temp_plot["date"] = temp_plot['date'].dt.tz_localize(None)
  1. 再运行你原本的绘图代码,X轴就只会显示数据中存在的日期刻度了。

完整可运行代码示例

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

# 构造你的测试数据
data = {
    "date": ["2018-01-28 00:00:00+11:00", "2018-01-29 00:00:00+11:00", 
             "2018-01-30 00:00:00+11:00", "2018-01-31 00:00:00+11:00"],
    "distance": [46.2, 0.0, 0.0, 0.0]
}
temp_plot = pd.DataFrame(data)
temp_plot["date"] = pd.to_datetime(temp_plot["date"])

# 关键步骤:移除时区
temp_plot["date"] = temp_plot['date'].dt.tz_localize(None)

# 执行绘图
plt.figure(figsize = (18,18))
plt.plot(temp_plot["date"], temp_plot["distance"], marker = 'o')
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
plt.setp(plt.gca().get_xticklabels(), rotation = 45)
plt.gca().set_xticks(temp_plot["date"])
plt.show()

原理说明

tz_localize(None)会移除Timestamp对象中的时区标记,将其转换为无时区的本地时间。这样matplotlib在生成X轴刻度时,就能完全对齐你数据中的日期,不会因为时区偏移产生计算误差,也就不会出现多余的刻度了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:43