Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

%Matplotlib - AttributeError: 'NoneType' object has no attribute 'lower'

I'm running %matplotlib in IPython, but there is a AttributeError: 'NoneType' object has no attribute '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'
like image 514
X1A Avatar asked Sep 21 '26 20:09

X1A


2 Answers

According to the docs %matplotlib may be supplied with a backend (including, for example, 'inline', 'notebook', 'gtk','qt4' etc.). If a backend option is not supplied it should use the default. It looks like this was broken in some version(s) of ipython (see here and here). I've also had some trouble with %matplotlib commands with some versions of matplotlib.

So, try updating ipython and/or matplotlib if possible and see if that fixes things.

Alternatively, use %matplotlib --list to get available options, then pick one and try (for example):

%matplotlib qt

If you get into some fancy plotting stuff, sometimes one backend won't work as well as another for a particular case, so you can test run a few and use what works (or is available). Also, if you want to do things directly with figure windows (such as moving figures around on your screen) then those become backend specific. If you're in a jupyter notebook try %matplotlib inline or %matplotlib notebook.

like image 59
argentum2f Avatar answered Sep 24 '26 09:09

argentum2f


Got here with a similar error message with Jupyter Lab. Was solved for me by placing the backend magic

%matplotlib inline

in the cell actually doing the plotting.

like image 37
Yuri Feldman Avatar answered Sep 24 '26 09:09

Yuri Feldman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!