Erreur étrange avec les étiquettes d'axes matplotlib

Je suis très nouveau en Python et en programmation en général, donc toutes mes excuses à l'avance si je manque quelque chose d'évident. J'essaie de tracer un graphique et d'étiqueter les axes, mais chaque fois que j'essaie d'étiqueter l'axe y, une exception est déclenchée. J'ai écrit le code ci-dessous dans un nouveau script pour m'assurer que le problème ne venait pas d'ailleurs dans le module. Je suis à l'aide de 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")

Chaque fois, je reçois l'erreur 'TypeError:' str 'object is not callable' pour la ligne finale. Si je change le y à un x, tout va bien. Si je change le x en y, j'obtiens la même erreur. Cependant, ylabel apparaît dans la liste déroulante pour ylabel, donc la fonction existe et la documentation indique qu'une chaîne est le seul argument nécessaire, exactement comme pour xlabel (matplotlib.pyplot.ylabel(s, *args, **kwargs) et matplotlib.pyplot.xlabel(s, *args, **kwargs)). Ce qui sur terre pourrait se passer ici?

29
demandé sur neptune36 2014-06-09 16:10:13

7 réponses

J'ai peur de ne pas pouvoir vous dire ce qui ne va pas parce que ça marche bien ici. Le code ci-dessous s'exécute sans erreur et montre le tracé avec l'étiquette correcte.

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()

Si cela ne fonctionne pas pour vous, vous pouvez peut-être essayer d'utiliser des objets figure et axes, comme ceci

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()

Ne résout pas le problème sous-jacent (ce qui est difficile puisque je ne peux pas le reproduire), mais peut-être qu'il atteindra au moins votre objectif.

8
répondu Mark 2014-06-09 12:32:20

J'ai eu ce même problème lorsque je travaillais dans IPython notebook.

Je pense qu'il peut être recréé comme suit:

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

Redémarrer le noyau ou réimporter les bibliothèques restaure plt.ylabel à une fonction.

67
répondu wolfins 2018-07-01 17:16:20

Je viens d'avoir ça qui m'est arrivé. Il semble que ce que j'ai fait était assigner une chaîne à xlab et ylab comme:

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

Cela a cassé les xlab et ylab de sorte que vous ne pouvez plus les appeler, car ils sont maintenant en fait des Chaînes, pas des fonctions.

De même, J'utilisais Jupyter, et j'ai dû tuer Jupyter et le relancer à partir de zéro pour résoudre ce problème.

Curieusement, réimporter les bibliothèques pendant que le kernal restait en cours d'exécution ne fonctionnait pas .

4
répondu Jordan 2017-11-28 16:22:48

J'ai enregistré le point de contrôle et arrêté le bloc-notes ipython. Ensuite, je l'ai redémarré ce qui a résolu le problème.

2
répondu Mreno sert 2017-07-07 10:22:10

J'ai fait face à ce même problème dans Jupyter notebook donc si vous êtes trop confronté à cela, redémarrez simplement le noyau et cela le corrigerait , il n'y a pas d'erreur syntaxique dans votre code .

1
répondu sayantan ghosh 2018-07-05 03:01:35

Cela se produit généralement, si vous attribuez la valeur Xlabel à la place de l'appel . ex: si vous voulez définir le Xlabel sur "X-DUMMY". vous devez utiliser

Plt.xlabel ("X-DUMMY")

, Mais par erreur si vous faites comme ci-dessous. plt.xlabel= " X-DUMMY" vous obtiendrez cette erreur . Même si vous le corrigez en disant . plt.xlabel ("X-DUMMY").

Ce problème se répète sauf si vous redémarrez vous redémarrez le kernal .

Raison étant, plt.xlabel est une fonction. en Python, les fonctions sont de première classe objet.une fois que vous avez attribué à plt.xlabel= "X-DUMMY". il se converti en une chaîne de caractères.plus tard, quand vous essayez ,il déclenche une erreur comme " TypeError: 'str' object n'est pas appelable'.

Vous pouvez l'essayer en utilisant " type (plt.xlabel) " avant et après assignment.to voir son type de données.

0
répondu Venkat Rajanala 2018-09-15 15:41:38

Si vous êtes sur win probablement vous n'avez pas installé la bonne version de matplotlib

Vous devez faire attention à la version de python que vous avez et que la version de matplotlib vous devez avoir sur votre ordinateur

Télécharger: https://pypi.python.org/pypi/matplotlib/ pour les utilisateurs de windows: python -m pip install --utilisateur matplotlib-2.1.0-cp36-cp36m-win_amd64.whl

Dans le nom du fichier, vous allez se cp36 = = Python 3.6, cp27 = = Python 2.7, toujours d'abord vérifier quelle version de python que vous avez sur l'ordinateur

-1
répondu Slavo7 2017-11-18 22:18:42