使用 drange 转换日期时间对象列表以在 matplotlib 中绘图会出现错误 [英] Converting a list of datetime objects using drange to plot in matplotlib gives an error
问题描述
我有一个日期时间对象列表,我想最终在设定范围内绘制这些对象.但是,当我使用 drange 定义此范围时,出现错误 "ValueError: Number of samples, -23, must be non-negative."
I have a list of datetime objects which I want to eventually plot within a set range. However when I define this range using drange, I get an error "ValueError: Number of samples, -23, must be non-negative."
有什么建议我在这里出错了吗?很确定我的数据中没有负值.
Any suggestions where I am going wrong here? Pretty sure my data has no negative values in it.
我正在使用Python 3.6.
I'm using Python 3.6.
这是我的代码:
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
date = [datetime.datetime(2017, 8, 24, 0, 0), datetime.datetime(2017, 8, 23, 0, 0), datetime.datetime(2017, 8, 22, 0, 0), datetime.datetime(2017, 8, 21, 0, 0), datetime.datetime(2017, 8, 18, 0, 0), datetime.datetime(2017, 8, 17, 0, 0), datetime.datetime(2017, 8, 16, 0, 0), datetime.datetime(2017, 8, 15, 0, 0), datetime.datetime(2017, 8, 14, 0, 0), datetime.datetime(2017, 8, 11, 0, 0), datetime.datetime(2017, 8, 10, 0, 0), datetime.datetime(2017, 8, 9, 0, 0), datetime.datetime(2017, 8, 8, 0, 0), datetime.datetime(2017, 8, 7, 0, 0), datetime.datetime(2017, 8, 4, 0, 0), datetime.datetime(2017, 8, 3, 0, 0), datetime.datetime(2017, 8, 2, 0, 0), datetime.datetime(2017, 8, 1, 0, 0)]
start = date[0] #is a datetime.datetime object according to type
end = date[-1] #is a datetime.datetime object according to type
delta = datetime.timedelta(days=5)
dates = mdates.drange(start, end, delta)
print(dates)
plt.plot(dates, y_data)
# raise ValueError("Number of samples, %s, must be non-negative." % num)
# ValueError: Number of samples, -23, must be non-negative.
推荐答案
我看到 end
小于 start
但 delta
是正的. drange
的作用类似于 range
.它期望以 start
开始并按 delta
的量更改它,直到到达 end
.我怀疑您应该在此语句中使用 -delta
.
I see that end
is less than start
but delta
is positive. drange
works like range
. It expects to begin with start
and change it by amount delta
until it reaches end
. I suspect that you should be using -delta
in this statement.
正如 ImportanceOfBeingErnest 在评论中所建议的,您可以使用以下方法定义 y_data
:
As suggested by ImportanceOfBeingErnest in a comment, you could define y_data
using:
y_data = range(len(dates))
这篇关于使用 drange 转换日期时间对象列表以在 matplotlib 中绘图会出现错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!