我正在尝试绘制一个带有日期时间轴的自定义图表。据我了解,matplotlib需要一个浮点格式,即距离时代以来的天数。因此,我想将numpy数组转换为matplotlib所需的浮点时代。
日期时间值存储在名为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]')
显然,matplotlib.dates.date2num只接受Python日期时间序列作为输入(不接受NumPy日期时间数组):
import matplotlib.dates as dates
plt_dates = dates.date2num(t)
引发了AttributeError:'numpy.datetime64'对象没有属性'toordinal'
我应该如何解决这个问题?我希望有一个适用于所有类型的numpy.datetime对象的解决方案。
我最好的解决方法(我不确定是否正确)是根本不使用date2num。相反,我尝试使用以下内容:
z = np.array([0]).astype(t.dtype)
plt_dates = (t - z)/ np.timedelta64(1,'D')
即使这个解决方案是正确的,使用库函数而不是手动临时解决方法更好。
numpy
具有类型datetime64
,而matplotlib
库期望的类型是datetime
。这使得该问题接近于此问题的重复。您的解决方法应该有效,并且与那里的已接受答案非常相似。 - J Richard Snapepandas
可以让 datetime64 轴“正常工作”。 - tacaswell