gpt4 book ai didi

Python matplotlib.dates.date2num : converting numpy array to matplotlib datetimes

转载 作者:太空狗 更新时间:2023-10-30 00:48:59 32 4
gpt4 key购买 nike

我正在尝试绘制带有日期时间轴的自定义图表。我的理解是 matplotlib 需要一种浮点格式,这是自纪元以来的几天。所以,我想按照 matplotlib 的要求将一个 numpy 数组转换为 float 。

日期时间值存储在一个名为 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')

即使这个解决方案是正确的,使用库函数也比手动临时解决方法更好。

最佳答案

要快速修复,请使用:

import matplotlib.dates as dates
plt_dates = dates.date2num(t.to_pydatetime())

或:

import matplotlib.dates as dates
plt_dates = dates.date2num(list(t))

似乎最新的 (matplotlib.__version__ '2.1.0') 不喜欢 numpy 数组... 编辑: 在我的例子中,在检查源代码之后,问题似乎是最新的 matplotlib.cbook 无法从 numpy 数组创建可迭代对象,并认为该数组是一个数字。

对于类似但更复杂的问题,请查看 http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64 , 可能 Why do I get "python int too large to convert to C long" errors when I use matplotlib's DateFormatter to format dates on the x axis? ,也许 matplotlib plot_date AttributeError: 'numpy.datetime64' object has no attribute 'toordinal' (如果有人回答)编辑:有人回答,他的代码使用 to_pydatetime() 似乎最好,另外:pandas 0.21.0 Timestamp compatibility issue with matplotlib ,尽管这在我的情况下不起作用(因为 python 2???)

关于Python matplotlib.dates.date2num : converting numpy array to matplotlib datetimes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843513/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com