Matplotlib AttributeError: объект 'module' не имеет атрибута 'popall'

При попытке построить график с pyplot я запускаю следующий код:

from matplotlib import pyplot as plt

x = [6, 5, 4]
y = [3, 4, 5]

plt.plot(x, y)
plt.show()

Это возвращает следующую ошибку:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-59955f73b463> in <module>()
      4 y = [3, 4, 5]
      5 
----> 6 plt.plot(x, y)
      7 plt.show()

/usr/local/lib/python2.7/site-packages/matplotlib/pyplot.pyc in plot(*args, **kwargs)
   3304 @_autogen_docstring(Axes.plot)
   3305 def plot(*args, **kwargs):
-> 3306     ax = gca()
   3307     # Deprecated: allow callers to override the hold state
   3308     # by passing hold=True|False

/usr/local/lib/python2.7/site-packages/matplotlib/pyplot.pyc in gca(**kwargs)
    948     matplotlib.figure.Figure.gca : The figure gca method.
    949     """
--> 950     return gcf().gca(**kwargs)
    951 
    952 # More ways of creating axes:

/usr/local/lib/python2.7/site-packages/matplotlib/figure.pyc in gca(self, **kwargs)
   1367 
   1368         # no axes found, so create one which spans the figure
-> 1369         return self.add_subplot(1, 1, 1, **kwargs)
   1370 
   1371     def sca(self, a):

/usr/local/lib/python2.7/site-packages/matplotlib/figure.pyc in add_subplot(self, *args, **kwargs)
   1019                     self._axstack.remove(ax)
   1020 
-> 1021             a = subplot_class_factory(projection_class)(self, *args, **kwargs)
   1022 
   1023         self._axstack.add(key, a)

/usr/local/lib/python2.7/site-packages/matplotlib/axes/_subplots.pyc in __init__(self, fig, *args, **kwargs)
     71 
     72         # _axes_class is set in the subplot_class_factory
---> 73         self._axes_class.__init__(self, fig, self.figbox, **kwargs)
     74 
     75     def __reduce__(self):

/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.pyc in __init__(self, fig, rect, facecolor, frameon, sharex, sharey, label, xscale, yscale, axisbg, **kwargs)
    527 
    528         # this call may differ for non-sep axes, e.g., polar
--> 529         self._init_axis()
    530         if axisbg is not None and facecolor is not None:
    531             raise TypeError('Both axisbg and facecolor are not None. '

/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.pyc in _init_axis(self)
    620     def _init_axis(self):
    621         "move this out of __init__ because non-separable axes don't use it"
--> 622         self.xaxis = maxis.XAxis(self)
    623         self.spines['bottom'].register_axis(self.xaxis)
    624         self.spines['top'].register_axis(self.xaxis)

/usr/local/lib/python2.7/site-packages/matplotlib/axis.pyc in __init__(self, axes, pickradius)
    674         self._minor_tick_kw = dict()
    675 
--> 676         self.cla()
    677         self._set_scale('linear')
    678 

/usr/local/lib/python2.7/site-packages/matplotlib/axis.pyc in cla(self)
    758         self._set_artist_props(self.label)
    759 
--> 760         self.reset_ticks()
    761 
    762         self.converter = None

/usr/local/lib/python2.7/site-packages/matplotlib/axis.pyc in reset_ticks(self)
    769         # define 1 so properties set on ticks will be copied as they
    770         # grow
--> 771         cbook.popall(self.majorTicks)
    772         cbook.popall(self.minorTicks)
    773 

AttributeError: 'module' object has no attribute 'popall'

Мой matplotlib всегда работал нормально, но эта ошибка возникла после того, как я переустановил ее с помощью homebrew и pip вчера. Я запускаю следующее:

OS: Mac OS Sierra 10.12.5
Python: 2.7.13
Matplotlib: 2.0.2

Я попробовал полную переустановку matplotlib и python с тех пор, но все равно получаю ту же ошибку. Я также попробовал несколько редакторов (Jupiter, Sublime, Terminal).

Любая помощь будет очень оценена!

Ответ 1

Я решил свою проблему, хотя я не совсем уверен, почему это ее решило.

Я использовал pip uninstall matplotlib, чтобы удалить установку python, а также обновил пути ~/.zshrc и ~/.bash_profile чтобы они содержали:

Homebrew:

export PATH=/usr/local/bin:$PATH

Python:

export PATH=/usr/local/share/python:$PATH

Это решило проблему. Я предполагаю, что проблема была вызвана двумя установками matplotlib и наличием пути в ~/.bash_proile но не с ~/.zshrc.

Ответ 2

У меня была эта точная ошибка, и в моем случае оказалось, что и pip и conda установили копии matplotlib. В "смешанной" среде с pip используемым для заполнения пробелов в Anaconda, pip может автоматически устанавливать обновления (уже установленные) зависимостей пакета, который вы попросили установить, создавая дублирование.

Чтобы проверить это:

$ conda list matplotlib
# packages in environment at /home/ec2-user/anaconda3:
# 
matplotlib                2.0.2               np113py35_0
matplotlib                2.1.1                     <pip>

Проблема! Fix:

$ pip uninstall matplotlib

Вероятно, это хорошая идея, чтобы заставить matplotlib обновить до версии pip хотел:

$ conda install matplotlib=2.1.1

Ответ 3

У меня была такая же проблема, что я пытался обновить мой Matplotlib с помощью

pip install -U matplotlib

а затем снова откройте анаконду, чтобы увидеть, как она работает