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?
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.
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.
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 .
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.
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 .
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.
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