使用matplotlib在y轴上绘制24小时的时间序列

时间:2018-01-15 05:26:32

标签: python python-3.x matplotlib

如果我执行以下操作,它似乎按预期工作,但y轴仅限于数据中的最早和最晚时间。我希望它显示午夜到午夜。我以为我可以用已经注释掉的代码来做到这一点。但当我取消注释时,我得到了正确的y轴,但没有任何情节。我哪里错了?

from datetime import datetime
import matplotlib.pyplot as plt

data = ['2018-01-01 09:28:52', '2018-01-03 13:02:44', '2018-01-03 15:30:27', '2018-01-04 11:55:09']
x = []
y = []

for i in range(0, len(data)):
    t = datetime.strptime(data[i], '%Y-%m-%d %H:%M:%S')
    x.append(t.strftime('%Y-%m-%d')) # X-axis = date
    y.append(t.strftime('%H:%M:%S')) # Y-axis = time

plt.plot(x, y, '.')
# begin = datetime.strptime('00:00:00', '%H:%M:%S').strftime('%H:%M:%S')
# end   = datetime.strptime('23:59:59', '%H:%M:%S').strftime('%H:%M:%S')
# plt.ylim(begin, end)
plt.show()

编辑:我也注意到x轴也不正确。数据跳过1月2日,但我想在轴上,所以数据是按比例缩放的。

这是一个极为简化的代码版本,处理超过2,500个条目的超过一年的数据。

1 个答案:

答案 0 :(得分:2)

如果您可以使用Pandas,请考虑以下方法:

import pandas as pd
data = pd.to_datetime(data, yearfirst=True)
plt.plot(data.date, data.time)
_=plt.ylim(["00:00:00", "23:59:59"])

plot

每条评论

更新
可以使用Locator模块的Formattermatplotlib.dates方法调整X轴日期格式。 Locator找到了刻度线位置,Formatter指定了标签的显示方式。

有时Matplotlib / Pandas只是做对了,有时你需要使用这些额外的方法准确地调出你想要的东西。在这种情况下,我不确定为什么这些数字会出现,但是这段代码会删除它们。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

f, ax = plt.subplots()
data = pd.to_datetime(data, yearfirst=True)
ax.plot(data.date, data.time)
ax.set_ylim(["00:00:00", "23:59:59"])

days = mdates.DayLocator()
d_fmt = mdates.DateFormatter('%m-%d')
ax.xaxis.set_major_locator(days)
ax.xaxis.set_major_formatter(d_fmt) 

plot2