如果我执行以下操作,它似乎按预期工作,但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个条目的超过一年的数据。
答案 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"])
每条评论 更新
可以使用Locator
模块的Formatter
和matplotlib.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)