gpt4 book ai didi

python-3.x - matplotlib.pyplot plot_date 函数在 cftime.datetime 对象上中断

转载 作者:行者123 更新时间:2023-12-04 10:12:39 28 4
gpt4 key购买 nike

尝试使用 matplotlib.pyplot.plot_date 函数和源自 netCDF4.num2date 函数的日期时间对象来绘制数据时,出现以下错误:

In [1]: from netCDF4 import num2date

In [2]: from matplotlib.pyplot import plot_date

In [3]: d=num2date((86400,2*86400),"seconds since 2000-01-01")

In [4]: gca().plot_date(d,(0,1))
...
AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'toordinal'

The above exception was the direct cause of the following exception:
ConversionError
...
ConversionError: Failed to convert value(s) to axis units: array([cftime.DatetimeGregorian(2000-01-02 00:00:00),
cftime.DatetimeGregorian(2000-01-03 00:00:00)], dtype=object)

安装了以下软件包版本:

Pandas 1.0.3

matplotlib 3.2.1

netcdf4 1.5.1.2

cftime 1.1.1.2

由于同一件事在具有较旧软件包版本的不同机器上完美运行,我假设存在版本问题。此外,我已经尝试了 this thread 中建议的解决方案和其他相关的线程,这似乎是一个类似的问题,但是

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

也没有帮助。

欢迎提出任何建议;)

最佳答案

我自己找到了答案,从版本 1.1.0 开始,cftime 包中的 num2date 函数更改了其默认行为,以尽可能返回 cftime datetime 实例而不是 python datetime 实例(选项参数 only_use_cftime_datetimes 现在默认为 True,而不是 False)。然而,plot_date 函数至少目前不处理这些。为避免此问题,请使用参数 only_use_cftime_dateimes=Falseonly_use_python_datetime=True 或使用便捷函数 num2pydate

关于python-3.x - matplotlib.pyplot plot_date 函数在 cftime.datetime 对象上中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61251157/

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