python - 如何在 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')
解决方案
尝试这个:
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()
推荐阅读
- android - 如何在Android中以编程方式更改视图约束上边距?
- laravel - 多个模型中的 Laravel 关系与 belongsToMany 和 hasMany
- android - Ionic+Android 上的 Firebase 身份验证打开一个浏览器窗口
- build - 如何在不发布的情况下将创建的 Outlook 插件分享给某人?
- java - 带有 Play 框架的 Swagger UI
- ms-access - 使用自动生成列插入选择
- html - 将按钮移动到与复选框和文本框引导程序在同一行
- python - 使用 pyspark 的 Spark RDD 的替代方法
- android - 如何从 CloudWatch 日志中过滤掉重复值?
- amazon-web-services - 如何从 AWS Java SDK 使用 IMDSv2