绘制时间序列时错误的时间和分辨率轴(秒而不是分钟)

wrong time and resolution axis when plotting time series (secs instead of min)

我想将 DataFrame 绘制为时间序列

import matplotlib.pyplot as plt
plt.plot(df['time'],df['Power'])

df2 = df.set_index('time')
df2.Power.plot()

它们都正确显示了所有 3531 y 值但错误的 x 轴时间标签,例如 25 秒而不是 25 分钟。

时间戳不是完全规则的并且有毫秒小数

0      2022-05-16 19:59:25.690
1      2022-05-16 19:59:25.890
2      2022-05-16 19:59:26.100
3      2022-05-16 19:59:26.320
4      2022-05-16 19:59:26.530
                 ...          
3526   2022-05-16 20:24:51.690
3527   2022-05-16 20:24:52.420
3528   2022-05-16 20:24:52.740
3529   2022-05-16 20:24:53.210
3530   2022-05-16 20:24:54.570

Name: time, Length: 3531, dtype: datetime64[ns]

我错过了什么?

您应该使用 matplotlib.dates 设置刻度间隔和格式。
例如你可以使用:

ax.xaxis.set_major_locator(md.MinuteLocator(interval = 1))

为了每分钟设置一个刻度和

ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))

为了将刻度标签格式更改为 HOUR:MINUTE
最后,你也可以使用

plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)

将刻度标签旋转 90 度,以提高可读性。
您可以根据需要更改上述参数,以便更好地绘制您的特定数据。

完整代码

import matplotlib.dates as md
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


N = 3531
df = pd.DataFrame()
df['time'] = pd.date_range(start = '2022-05-16 19:59:25.69', end = '2022-05-16 20:24:54.570', periods = N)
df['Power'] = np.random.rand(N)

fig, ax = plt.subplots()

ax.plot(df['time'], df['Power'])

ax.xaxis.set_major_locator(md.MinuteLocator(interval = 1))
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)

plt.show()

情节