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

使用Matplotlib以datetime类型绘制非连续时间序列遇异常问题

问题描述

我尝试使用以下数据集绘制date与num的关系图:

date    num
0   22/12/2022 09:09    7.92
1   22/12/2022 09:09    7.95
2   22/12/2022 09:09    7.98
3   22/12/2022 09:09    7.95
4   22/12/2022 09:09    7.93

... ... ...

4514    23/12/2022 14:48    5.68
4515    23/12/2022 14:48    5.68
4516    23/12/2022 14:48    5.69
4517    23/12/2022 14:48    5.70
4518    23/12/2022 14:48    5.66

当date列类型为字符串时,绘制的图是正确的:

data_1.plot(x='date',y='num')
plt.xticks(rotation = 45)

(配图:字符串日期绘图效果)

但当我将date转换为datetime类型后,图中出现了数据中不存在的时间点:

data_1['date'] = pd.to_datetime(data_1['date'], format='%d/%m/%Y %H:%M')
data_1.plot(x='date',y='num')
plt.xticks(rotation = 45)

(配图:datetime类型绘图效果)

更新:感谢编辑我的问题并提供解决方案,但该方案建议转回字符串类型,我需要基于datetime类型的解决办法。

解决方案

原因分析

使用pandas的plot()方法绘制datetime类型的x轴时,pandas会自动生成连续的时间轴刻度——哪怕你的数据是离散的时间点(比如多个数据点共享同一时间),它会默认填充时间区间内的所有刻度,导致出现数据中不存在的时间点。

解决办法

方法1:用matplotlib直接绘图,指定x轴刻度为数据中唯一的datetime值

import matplotlib.pyplot as plt
import pandas as pd

# 转换date为datetime类型
data_1['date'] = pd.to_datetime(data_1['date'], format='%d/%m/%Y %H:%M')

# 获取数据中唯一的时间点
unique_dates = data_1['date'].unique()

# 使用matplotlib原生绘图
plt.plot(data_1['date'], data_1['num'])
plt.xticks(ticks=unique_dates, labels=unique_dates, rotation=45)
plt.show()

方法2:pandas绘图时启用x_compat=True参数

pandas的plot()方法提供x_compat=True参数,会调用matplotlib的原生日期处理逻辑,避免自动生成额外的时间刻度:

data_1['date'] = pd.to_datetime(data_1['date'], format='%d/%m/%Y %H:%M')
data_1.plot(x='date', y='num', x_compat=True)
plt.xticks(rotation=45)
plt.show()

方法3:手动设置x轴刻度定位器

通过matplotlib的日期定位器,强制只显示数据中存在的时间点:

import matplotlib.dates as mdates

data_1['date'] = pd.to_datetime(data_1['date'], format='%d/%m/%Y %H:%M')
ax = data_1.plot(x='date', y='num')
# 设置刻度为数据中的唯一日期
ax.xaxis.set_major_locator(mdates.FixedLocator(data_1['date'].unique()))
plt.xticks(rotation=45)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:05:49