Sin*_*ina 5 python datetime numpy matplotlib
我正在尝试使用日期时间轴绘制自定义图表.我的理解是matplotlib需要浮点格式,这是自纪元以来的几天.所以,我想根据matplotlib的要求将numpy数组转换为float epoch.
datetime值存储在名为t的numpy数组中:
In [235]: t
Out[235]: array(['2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:00:59.000000000-0800',
'2008-12-01T00:09:26.000000000-0800',
'2008-12-01T00:09:41.000000000-0800'], dtype='datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)
显然,matplotlib.dates.date2num只接受一系列python日期时间作为输入(不是numpy datetimes数组):
import matplotlib.dates as dates
plt_dates = dates.date2num(t)
Run Code Online (Sandbox Code Playgroud)
引发AttributeError:'numpy.datetime64'对象没有属性'toordinal'
我该如何解决这个问题?我希望有一个适用于所有类型的numpy.datetime类似对象的解决方案.
我最好的解决方法(我不确定是正确的)是不要使用date2num.相反,我尝试使用以下内容:
z = np.array([0]).astype(t.dtype)
plt_dates = (t - z)/ np.timedelta64(1,'D')
Run Code Online (Sandbox Code Playgroud)
即使如果这个解决方案是正确的,使用库函数更好,而不是手动adhoc解决方法.
要快速解决问题,请使用:
import matplotlib.dates as dates
plt_dates = dates.date2num(t.to_pydatetime())
Run Code Online (Sandbox Code Playgroud)
要么:
import matplotlib.dates as dates
plt_dates = dates.date2num(list(t))
Run Code Online (Sandbox Code Playgroud)
似乎最新的(matplotlib .__ version__'2.1.0')不喜欢numpy数组... 编辑:在我的情况下,在检查源代码之后,问题似乎是最新的matplotlib.cbook无法创建一个可迭代的numpy数组并认为数组是一个数字.
对于类似但更复杂的问题,请查看http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64,可能为什么我的"python int太大而无法转换为C long"当我使用matplotlib的DateFormatter格式化x轴上的日期时出错?,也许 matplotlib plot_date AttributeError:'numpy.datetime64'对象没有属性'toordinal'(如果有人回答)编辑:有人回答,他的代码使用to_pydatetime()似乎最好,还有:pandas 0.21.0与matplotlib的时间戳兼容性问题,虽然这在我的情况下不起作用(因为python 2 ???)
| 归档时间: |
|
| 查看次数: |
11838 次 |
| 最近记录: |