绘制带时区Timestamp数据时Matplotlib X轴刻度异常问题及解决
解决带时区Timestamp导致X轴出现多余日期刻度的问题
问题根源
你遇到的X轴出现不存在的27-01-2018刻度,核心原因是你的date字段是带时区的Timestamp(后缀+11:00)。matplotlib在解析这类带时区的时间数据时,时区偏移会让底层日期计算出现偏差,最终生成了数据里没有的额外刻度。
快速解决方案
移除日期字段的时区信息,让matplotlib能精准匹配你数据中的日期值:
- 先处理
date列,剥离时区属性:
temp_plot["date"] = temp_plot['date'].dt.tz_localize(None)
- 再运行你原本的绘图代码,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
相关产品推荐
相关产品推荐

