Python 使用matplotlib在y轴上绘制24小时的时间序列
如果我运行以下命令,它似乎会按预期工作,但y轴仅限于数据中最早和最晚的时间。我想让它显示午夜到午夜。我想我可以用注释掉的代码做到这一点。但当我取消注释它时,我得到了正确的y轴,但没有任何图形。我哪里做错了Python 使用matplotlib在y轴上绘制24小时的时间序列,python,python-3.x,matplotlib,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-0
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日,但我希望它在轴上,以便数据可以缩放
<>这是一个大大简化的代码,处理超过一年的数据,超过2500个条目。 < P>如果你有熊猫,请考虑这个方法:
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"])
根据评论更新可以使用
matplotlib.dates
模块的Locator
和Formatter
方法调整X轴日期格式<代码>定位器查找记号位置,格式设置程序
指定标签的显示方式
有时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)
对于Python 3.6,您的代码为我抛出了一个错误:
ValueError:无法将字符串转换为float:'2018-01-01'
@andrew\u reece:注释过的代码?奇怪的是,Python 3.6.2没有出现错误。不管怎样看起来我要扔掉那个丑陋的代码。这用更简单的代码修复了两个轴。非常感谢。只有一个问题:如何将x轴限制为单个日期?我不知道那些13岁的人在那里干什么。不客气。请参阅更新的答案,以调整x轴刻度标签。这是完美的。。。除了我想要点,不是线。我现在太迷恋这段代码了,我甚至不知道该怎么做。我假设plt.plot(data.date,data.time,“.”)就足够了,但它可以绘制点和线。我相信我会把它整理好,在某个时候更好地理解它。再次感谢您非常有用的帮助!知道了。它只需要ax.plot(data.date,data.time,“.”)和plt.plot(…)的省略。您还可以使用ax.plot_date()
来获取点。