Вопрос или проблема
Я анализирую набор данных в Python исключительно для учебных целей. В коде, который я написал ниже, я получаю некоторые ошибки, от которых не могу избавиться. Вот код:
plt.plot(decade_mean.index, decade_mean.values, 'o-', color="r", lw=3, label="Decade Average")
plt.scatter(movieDF.year, movieDF.rating, color="k", alpha=0.3, lw=2)
plt.xlabel('Year')
plt.ylabel('Rating')
remove_border()
Я получаю следующие ошибки:
1. TypeError: 'str' object is not callable
2. NameError: name 'remove_border' is not defined
Кроме того, label=”Decade Average” не отображается на графике.
Что больше всего меня смущает, так это то, что в отдельном фрагменте кода для графиков (см. ниже) я не получил первую ошибку выше, хотя remove_border
все равно оставалась проблемой.
plt.hist(movieDF.rating, bins=5, color="blue", alpha=0.3)
plt.xlabel('Rating')
Буду очень признателен за объяснение всех или некоторых ошибок. Спасибо.
Следуя комментариям, я публикую данные и трассировку ниже: decade_mean представлен ниже.
year
1970 8.925000
1980 8.650000
1990 8.615789
2000 8.378947
2010 8.233333
Name: rating, dtype: float64
трассировка:
TypeError Traceback (most recent call last)
<ipython-input-361-a6efc7e46c45> in <module>()
1 plt.plot(decade_mean.index, decade_mean.values, 'o-',color="r",lw=3,label="Decade Average")
2 plt.scatter(movieDF.year, movieDF.rating, color="k", alpha = 0.3, lw=2)
----> 3 plt.xlabel('Year')
4 plt.ylabel('Rating')
5 remove_border()
TypeError: 'str' object is not callable
Я решил проблему remove_border. Это была глупая ошибка с моей стороны. Но я так и не смог понять проблему со ‘str’.
Похоже, что remove_border
не определен. Вам нужно определить функцию перед использованием.
Я не знаю, откуда возникает ошибка строки, мне это не ясно. Если вы опубликуете всю трассировку, это будет понятнее.
Наконец, ваш label не отображается, потому что вам нужно вызвать метод plt.legend()
.
Кажется, что remove_border()
не распознается как функция. Учитывая, что вы не указали пакет, к которому он принадлежит, вы сами его реализовали? Python предполагает, что remove_border
— это строка, и вы пытаетесь ее “вызвать” — отнестись к ней как к функции. Вторая ошибка говорит о том же: функция remove_border
нигде не определена так, чтобы Python мог ее найти.
.
Ответ или решение
Ошибки, которые вы столкнулись в вашем коде, требуют внимательного разбора для их корректного устранения. Рассмотрим каждую из них по отдельности с использованием подхода TEA (Theory, Example, Application).
Теория (Theory)
1. TypeError: ‘str’ object is not callable
Данная ошибка возникает, когда вы пытаетесь вызвать объект типа str
как функцию. В Python любые операции, оказывающие влияние на объект, например использование круглых скобок для вызова, должны быть выполнены с функциями или методами, а не с текстовыми строками.
2. NameError: name ‘remove_border’ is not defined
Эта ошибка сообщает, что идентификатор remove_border
не распознан Python как определенная функция или метод в текущем пространстве имен. Это может означать, что функция не была определена в вашем коде или необходимый модуль не импортирован.
Пример (Example)
Разберем ваш код и попытаемся выяснить, откуда происходит каждая ошибка:
plt.plot(decade_mean.index, decade_mean.values, 'o-', color="r", lw=3, label="Decade Average")
plt.scatter(movieDF.year, movieDF.rating, color="k", alpha=0.3, lw=2)
plt.xlabel('Year')
plt.ylabel('Rating')
remove_border()
Распространенная причина появления ошибки TypeError
может быть связана с перекрытием имен. Например, если ранее в коде plt.xlabel
уже использовалось для присваивания строкового значения, то Python будет пытаться вызвать строку, а не функцию xlabel
.
Ошибка NameError
прямо указывает на то, что remove_border
не был определен в вашей сессии, что вызывает исключение, так как Python не может найти такую функцию.
Применение (Application)
Шаги для решения:
-
TypeError: ‘str’ object is not callable
Проверьте, не было ли до этого присвоено имя переменной
xlabel
. Если это так, необходимо использовать другое имя для переменной или выполнить переинициализацию:# Если была строка с похожим названием, переименуйте её x_label = 'Year Label' plt.xlabel('Year') # Обращение к функции
-
NameError: name ‘remove_border’ is not defined
Если функция
remove_border
недоступна, возможно, она является частью стороннего модуля, который не был импортирован. Если вы её определяли самостоятельно, убедитесь, что её код присутствует в текущем файле или импортирован из другого:def remove_border(): # Например, определение такой функции ax = plt.gca() ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False)
Или убедитесь, что соответствующий модуль импортирован в случае, если это сторонняя функция.
-
Легенда не отображается на графике
Для отображения легенды необходимо явно вызвать метод
plt.legend()
:plt.legend()
Эти шаги должны помочь вам устранить текущие ошибки. Однако настоятельно рекомендуется всегда внимательно следить за моделями именования переменных и функций, чтобы избежать конфликтов и обеспечить ясность кода. Убедитесь, что все используемые функции определены и корректно импортированы — это основа надежного кодирования в Python.