Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib在y轴上绘制24小时的时间序列_Python_Python 3.x_Matplotlib - Fatal编程技术网

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

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

如果我运行以下命令,它似乎会按预期工作,但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日,但我希望它在轴上,以便数据可以缩放


<>这是一个大大简化的代码,处理超过一年的数据,超过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()
来获取点。