首页 > 解决方案 > 如何在 python 中绘制 23h-25h 时间序列

问题描述

我有这种桌子。

在此处输入图像描述

我想在一张图上绘制 x=day, y=hour(xy 图)。

所以我将所有天都设置为某个固定的日期(2017-03-01),除了绘图的小时和分钟参数。

在绘图之后,我只是从原始时间数据中更改 x 标签

因此,这个步骤我得到了如下图。

在此处输入图像描述

但23~00小时数据出现问题

在此处输入图像描述

为了在图表中看起来清晰

如果最小值和最大值的差距超过 23 小时,

我想在数据框中搜索所有 00:00 时隙并在 00:00 到 24 小时添加

实际上,从 23:00 到 24:00 之间有一个小时的差异。

但是,我从 23:00 到 00:00 附上的下图的差异是 23 小时。

您能否让我知道如何按照我的要求绘制数据?

我也附上我的代码

plt.clf()
#####read files###########################
df = pd.read_excel('files',parse_dates=[0])
#####to make xlabel###########################
x = range(len(df))
xla =df['UTC'].dt.strftime('%Y-%m-%d')
#####set the days same date ###########################
y = df['UTC'].apply(lambda x: x.replace(year=2020, month=3, day=1))
ax = plt.subplot()
ax.plot(x, y ,marker='s', color='k')

ax.yaxis.set_major_locator(md.MinuteLocator(interval=5))
ax.yaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
plt.xticks(x,xla)
plt.xticks(rotation=90)
ax.xaxis.grid(True)
ax.yaxis.grid(True)
plt.title('time_of_waypoint', fontsize=10)
plt.xlabel('day')
plt.ylabel('time')

标签: pythonmatplotlib

解决方案


尝试这个:

import pandas as pd
import matplotlib.pyplot as plt
from io import StringIO

data = StringIO("""datetime
2018-04-03 00:00:00
2018-04-04 23:56:00
2018-04-05 23:57:00
2018-04-06 23:58:00
2018-04-07 00:02:00
2018-04-08 23:59:00
2018-04-09 23:57:00
2018-04-10 23:52:00
""")

df = pd.read_csv(data, engine='python')
df['datetime']= pd.to_datetime(df['datetime'])
x = df['datetime'].apply(lambda x:x.strftime('%m-%d'))
y = df['datetime'].apply(lambda x:x.strftime('%H:%m'))

plt.plot(x,y, 'o')
plt.plot(x,y, '-')
plt.xlabel('month-day')
plt.ylabel('hour:minute')
plt.show()

在此处输入图像描述


推荐阅读