%Matplotlib - AttributeError: 'NoneType' 对象没有属性 'lower'

Posted

技术标签:

【中文标题】%Matplotlib - AttributeError: \'NoneType\' 对象没有属性 \'lower\'【英文标题】:%Matplotlib - AttributeError: 'NoneType' object has no attribute 'lower'%Matplotlib - AttributeError: 'NoneType' 对象没有属性 'lower' 【发布时间】:2019-12-04 10:58:54 【问题描述】:

我在 IPython 中运行 %matplotlib,但是有一个 AttributeError: 'NoneType' 对象没有属性 'lower'

Python 3.7; MacOs Mojave 10.14.6 (18G84); conda matplotlib: 3.1.1 pypi_0 pypi

In [13]: import matplotlib                                                      

In [14]: import matplotlib.pyplot as plt                                        

In [15]: %matplotlib                                                            
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-a49a4afc47c5> in <module>
----> 1 get_ipython().run_line_magic('matplotlib', '')

//anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
   2311                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
   2312             with self.builtin_trap:
-> 2313                 result = fn(*args, **kwargs)
   2314             return result
   2315 

<//anaconda3/lib/python3.7/site-packages/decorator.py:decorator-gen-108> in matplotlib(self, line)

//anaconda3/lib/python3.7/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
    185     # but it's overkill for just that one bit of state.
    186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
    188 
    189         if callable(arg):

//anaconda3/lib/python3.7/site-packages/IPython/core/magics/pylab.py in matplotlib(self, line)
     97             print("Available matplotlib backends: %s" % backends_list)
     98         else:
---> 99             gui, backend = self.shell.enable_matplotlib(args.gui.lower())
    100             self._show_matplotlib_backend(args.gui, backend)
    101 

AttributeError: 'NoneType' object has no attribute 'lower'

【问题讨论】:

Purpose of "%matplotlib inline"的可能重复 不要只使用%matplotlib。使用%matplotlib inline 但是,在(控制台)IPython 笔记本中,您可能更愿意不使用“%matplotlib”魔术命令。 我也遇到了同样的问题。 %matplotlib 本身在 ipython shell 中通常会使图形自动弹出,并使它们具有交互性等。它与嵌入图形的 %matplotlib inline 具有不同的目的(这不是我想要的)。您可以通过运行plt.ion() 并选择合适的后端来获得一些类似的行为。不知道为什么 %matplotlib 命令在某些安装中不起作用。 【参考方案1】:

在 Jupyter Lab 中出现类似的错误消息。通过放置后端魔法为我解决了

%matplotlib inline

在实际进行绘图的单元格中。

【讨论】:

【参考方案2】:

根据the docs%matplotlib 可以提供后端(包括,例如,'inline'、'notebook'、'gtk'、'qt4' 等)。如果未提供后端选项,它应该使用默认值。看起来这在 ipython 的某些版本中被破坏了(参见 here 和 here)。我在使用 matplotlib 的某些版本的 %matplotlib 命令时也遇到了一些问题。

所以,如果可能,请尝试更新ipython 和/或matplotlib,看看是否能解决问题。

或者,使用%matplotlib --list 获取可用选项,然后选择一个并尝试(例如):

%matplotlib qt

如果您遇到一些花哨的绘图内容,有时一个后端在特定情况下不会像另一个后端那样工作,因此您可以测试运行一些并使用有效(或可用)的东西。此外,如果您想直接使用图形窗口进行操作(例如在屏幕上移动图形),那么这些将成为特定于后端的。如果您在jupyter notebook 中,请尝试%matplotlib inline%matplotlib notebook

【讨论】:

以上是关于%Matplotlib - AttributeError: 'NoneType' 对象没有属性 'lower'的主要内容,如果未能解决你的问题,请参考以下文章

python 串口

使用opencv进行人脸识别时出现属性错误

Matplotlib 入门

Matplotlib 安装

Matplotlib 基本概念

在 Python 中导入历史标准普尔 500 指数数据 [关闭]