Странная ошибка с метками оси 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 у вас есть на компьютере