当我尝试使用matplotlib进行绘图时,一直出现错误。

4

我正在使用一个利用matplotlib的绘图函数,突然间它停止工作并返回以下错误。

from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
ImportError: cannot import name 'warnings' from 'matplotlib.dates'

这个问题有已知的解决方法吗?

谢谢。


2
如果您告诉我们错误是“突然发生”的,而不是展示代码,那么寻求帮助可能会变得很困难。 - M-Wi
2个回答

5

让我猜猜...您正在使用backtrader,在使用过程中遇到了此问题。 您遇到的错误是:

File "/xxx/backtrader/plot/locator.py", line 35, in <module>
from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
ImportError: cannot import name 'warnings' from 'matplotlib.dates'    

错误的根本原因是在上面提到的文件(locator.py)的第35行,尝试从matplotlib.dates导入“warnings”:
from matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,
                          MONTHS_PER_YEAR, DAYS_PER_WEEK,
                          SEC_PER_HOUR, SEC_PER_DAY,
                          num2date, rrulewrapper, YearLocator,
                          MicrosecondLocator, warnings)    

但是如果您查看文档或代码,您会发现 matplotlib.dates 中没有警告。在 Github 上调查这个文件的历史记录,可以找到一行代码:
import warnings   

在2019年9月7日已经移除,这可能是你遇到问题的原因。

在Backtrader中,有一个拉取请求等待解决这个问题:

https://github.com/mementum/backtrader/pull/418

如果你已经fork了代码,你可以自行应用修复,或者等待该拉取请求合并。


没错。谢谢提供信息。 - Ryan Reid
有没有想法,这样的合并通常需要多长时间?谢谢。 - Ryan Reid
不,情况比较复杂:backtrader的唯一维护者只进行修复,并且非常不规律。一些用户正在考虑分叉并创建一个新版本(backtrader2)。您可以在此处找到有关此问题的讨论:https://community.backtrader.com/topic/2553/backtrader-s-future 您可以在此处找到有关您遇到的问题的讨论:https://community.backtrader.com/topic/2784/cannot-import-name-warnings-from-matplotlib-dates - FFF
回滚到backtrader的先前版本并不能解决这个问题。根据matplotlib版本历史记录:https://pypi.org/project/matplotlib/#history 2019年9月7日之前的版本仍然有“import warnings”行。因此,回滚到matplotlib版本3.1.1应该可以解决问题(可能会出现与先前版本相关的matplotlib错误)。如果您尝试了,请发布您是否成功的结果,以便将来遇到同样问题并愿意遵循相同的解决方法的人可以得到答案。 - FFF
2
大家好, 仅供记录,我也遇到了这个问题,并回退到matplotlib 3.1.1(通过执行pip uninstall matplotlibpip install matplotlib=3.1.1),然后它就可以工作了!至于_tkinter问题,那是与这个特定的matplotlib问题无关的 - 您需要安装tkinter包 - 参见https://dev59.com/6FYM5IYBdhLWcg3wrRqC - squeegene
显示剩余4条评论

1
我遇到了相同的问题... 我使用的是python-3.6.13,conda-4.9.2,backtrader-1.9.76.123.dist-info。
看起来我使用的matplotlib版本(matplotlib-3.3.4)有问题,即使导入warnings(import warnings)也无法解决。
对我来说解决方案是: pip uninstall matplotlib pip install matplotlib==3.2.2
希望能帮到你,谢谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接