matplotlib轴标签出现奇怪错误

问题描述 投票:34回答:7

我对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更改为y,我会得到相同的错误。但是,ylabel出现在ylabel的下拉列表中,因此函数确实存在,文档说字符串是唯一必要的参数,与xlabel完全相同(matplotlib.pyplot.ylabel(s,* args,** kwargs)和matplotlib.pyplot.xlabel(s,* args,** kwargs))。到底是怎么回事?

python matplotlib axes
7个回答
99
投票

在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恢复为函数。


9
投票

编辑:此代码适用于干净的运行,但你可能已经改变了ylabel,在这种情况下重新启动应该修复它,如@wolfins answered (check that answer)

我担心我不能告诉你出了什么问题,因为它在这里工作得很好。以下代码运行时没有错误,并显示带有正确标签的图。

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

没有解决潜在的问题(这很难,因为我无法重现它),但也许它至少会实现你的目的。


5
投票

我发生了这件事。似乎我所做的是将字符串分配给xlab和ylab,如:

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

这打破了xlab和ylab,因此你不能再调用它们,因为它们现在实际上是字符串,而不是函数。

同样地,我正在使用Jupyter,我不得不杀死Jupyter并从头开始重新运行以解决这个问题。

奇怪的是,在内核仍在运行时重新导入库不起作用。


3
投票

我保存了检查点并暂停了ipython笔记本。然后我重新启动它解决了这个问题。


3
投票

如果您指定Xlabel值而不是调用,这通常会发生。例如:如果你想将Xlabel设置为“X-DUMMY”。你需要使用

plt.xlabel("X-DUMMY")

但如果你这样做,那就错了。

plt.xlabel= "X-DUMMY"

你会收到这个错误。即使你纠正它说。

plt.xlabel("X-DUMMY") 

除非重新启动重新启动核心,否则此问题会重复出现。

原因是,plt.xlabel是一个函数。在python函数中是第一类objects.once你分配

 plt.xlabel= "X-DUMMY" 

它被转换为字符串。以后当你尝试时,它会抛出错误

'TypeError:'str'对象不可调用'。

您可以在分配前后使用type(plt.xlabel)进行尝试。查看其数据类型。


1
投票

我在jupyter笔记本中遇到了同样的问题,所以如果你太面对只是重新启动内核而且会修复它,你的代码中没有任何语法错误。


-1
投票

如果你在胜利,可能你没有安装正确版本的matplotlib

你需要注意你拥有哪个版本的python以及你需要在你的计算机上使用的matplotlib版本

下载:用于Windows用户的https://pypi.python.org/pypi/matplotlib/:python -m pip install --user matplotlib-2.1.0-cp36-cp36m-win_amd64.whl

在文件名中你将cp36 == python 3.6,cp27 == python 2.7,总是首先检查你在计算机上有哪个版本的python

© www.soinside.com 2019 - 2024. All rights reserved.