使用 drange 转换日期时间对象列表以在 matplotlib 中绘图会出现错误 [英] Converting a list of datetime objects using drange to plot in matplotlib gives an error

查看:46
本文介绍了使用 drange 转换日期时间对象列表以在 matplotlib 中绘图会出现错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个日期时间对象列表,我想最终在设定范围内绘制这些对象.但是,当我使用 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 小于 startdelta 是正的. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆