Странная ошибка с метками оси matplotlib

Я очень новичок в Python и программировании в целом, поэтому заранее приношу свои извинения, если мне не хватает чего-то очевидного. Я пытаюсь построить график и пометить оси, но каждый раз, когда я пытаюсь маркировать ось y, возникает исключение. Я написал код ниже в новом скрипте, чтобы убедиться, что проблема не возникает из другого места в модуле. Я использую Python 3.4.

from numpy import *
from matplotlib import *

a = [1, 2, 3, 4, 5]
b = [2, 3, 2, 3, 2]
pyplot.plot(a, b)
pylab.xlabel("Time")
pylab.ylabel("Speed")

Каждый раз, когда я получаю сообщение об ошибке 'TypeError:' str 'объект не вызываем' для последней строки. Если я изменю y на x, все будет хорошо. Если я изменил x на ay, я получаю ту же ошибку. Однако в раскрывающемся списке для ylabel появляется ylabel, поэтому функция говорит о том, что строка является единственным необходимым аргументом, точно так же, как и для xlabel (matplotlib.pyplot.ylabel(s, * args, ** kwargs) и matplotlib.pyplot.xlabel(s, * args, ** kwargs)). Что может быть здесь?

Ответ 1

Боюсь, я не могу сказать вам, что происходит не так, потому что здесь прекрасно работает. Нижеприведенный код работает без ошибок и показывает график с правильной меткой.

from matplotlib import pyplot, pylab
a = [1, 2, 3, 4, 5]
b = [2, 3, 2, 3, 2]
pyplot.plot(a, b)
pylab.xlabel("Time")
pylab.ylabel("Speed")
pyplot.show()

Если это не работает для вас, возможно, вы можете попробовать использовать объекты с фигурами и осями, например

from matplotlib.pyplot import subplots, show
a = [1, 2, 3, 4, 5]
b = [2, 3, 2, 3, 2]
fig, ax = subplots()
ax.plot(a, b)
ax.set_xlabel("Time")
ax.set_ylabel("Speed")
show()

Не решает основной проблемы (что сложно, так как я не могу воспроизвести ее), но, возможно, она достигнет вашей цели по крайней мере.

Ответ 2

У меня была такая же проблема при работе в ноутбуке iPython.

Я думаю, что его можно воссоздать следующим образом:

import matplotlib.pyplot as plt
plt.ylabel = 'somestring' # oh wait this isn't the right syntax.
... 
plt.ylabel('somestring') # now this breaks because the function has been turned into a string

Перезапуск ядра или повторный импорт библиотек восстанавливает функцию plt.ylabel.

Ответ 3

Я просто это случилось со мной. Кажется, что я сделал назначение строки для xlab и ylab вроде:

plt.xlab = 'string'
plt.ylab = 'string'

Это сломало xlab и ylab, так что вы больше не можете их называть, поскольку теперь они фактически являются строками, а не функциями.

Точно так же я использовал Jupyter, и мне пришлось убить Jupyter и повторно запустить его с нуля, чтобы исправить эту проблему.

Как ни странно, повторное импортирование библиотек в то время, когда ядро осталось запущенным, НЕ работает.

Ответ 4

Я сохранил контрольную точку и остановил ноутбук ipython. Затем я перезапустил его, что решило проблему.

Ответ 5

Обычно это происходит, если вместо вызова вызывать значение Xlabel. пример: если вы хотите установить Xlabel на "X-DUMMY". вам нужно использовать

plt.xlabel("X-DUMMY")

но по ошибке, если вы сделаете, как показано ниже.

plt.xlabel= "X-DUMMY"

Вы получите эту ошибку. Даже если вы исправите это высказывание.

plt.xlabel("X-DUMMY") 

Эта проблема повторяется до тех пор, пока вы не перезапустите, вы перезапустите ядро

Причина в том, что plt.xlabel - это функция. в Python функции являются объектами первого класса.

 plt.xlabel= "X-DUMMY" 

оно преобразуется в строку. позже, когда вы пытаетесь, выдает ошибку как

'TypeError: объект' str 'не может быть вызван'.

Вы можете попробовать его, используя type(plt.xlabel) до и после назначения. чтобы увидеть его тип данных.

Ответ 6

Я столкнулся с этой же проблемой в ноутбуке jupyter, поэтому, если вы слишком сталкиваетесь с тем, что просто перезапустите ядро и это исправит, в вашем коде не будет синтаксической ошибки.

Ответ 7

если вы на выигрыше, вероятно, вы не установили правильную версию matplotlib

вам нужно быть осторожным, какую версию python у вас есть и какую версию matplotlib вы должны иметь на своем компьютере

скачать: https://pypi.python.org/pypi/matplotlib/ для пользователей Windows: python -m pip install --user matplotlib-2.1.0-cp36-cp36m-win_amd64.whl

в имени файла вы будете использовать cp36 == python 3.6, cp27 == python 2.7, всегда сначала проверяйте, какая версия python у вас есть на компьютере