Python matplotlib轴标签出现奇怪错误

Python matplotlib轴标签出现奇怪错误,python,matplotlib,axes,Python,Matplotlib,Axes,一般来说,我对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")

一般来说,我对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“object is not callable”。如果我把y改成x,一切都好。如果我把x改成y,我会得到同样的错误。但是,ylabel出现在ylabel的下拉列表中,因此函数确实存在,文档中说字符串是唯一必需的参数,与xlabel(matplotlib.pyplot.ylabel(s,*args,**kwargs)和matplotlib.pyplot.xlabel(s,*args,**kwargs))完全一样。这到底是怎么回事?

编辑:这段代码对于干净的运行很好,但您可能已经更改了
ylabel
,在这种情况下,重新启动应该会修复它,就像@wolfins一样

恐怕我不能告诉你出了什么问题,因为它在这里很好用。下面的代码运行时没有错误,并显示具有正确标签的绘图

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()
如果这对您不起作用,也许您可以尝试使用figure和Axis对象,如下所示

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

无法解决根本问题(这很难,因为我无法重现),但至少它可以达到您的目的。

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

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

如果您在win上,可能您没有安装正确版本的matplotlib

您需要注意您拥有的python版本以及您需要在计算机上拥有的matplotlib版本

下载: 对于windows用户:python-mpip安装——用户matplotlib-2.1.0-cp36-cp36m-win_amd64.whl


在文件名中,您将使用cp36==python 3.6、cp27==python 2.7,始终首先检查计算机上的python版本。 我所做的似乎是给xlab和ylab分配一个字符串,比如:

plt.xlab = 'string'
plt.ylab = 'string'
这破坏了xlab和ylab,因此您无法再调用它们,因为它们现在实际上是字符串,而不是函数

类似地,我在使用Jupyter,我必须杀死Jupyter并从头开始重新运行它来修复这个问题


奇怪的是,在内核仍在运行的情况下重新导入库并没有起作用。

我在jupyter notebook中也遇到过同样的问题,因此,如果您面临的问题太多,只需重新启动内核就可以解决它,代码中没有任何语法错误。

如果您指定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)
进行尝试。查看其数据类型。

这可能会帮助您:

# 0. Import matplotlib and get it ready
%matplotlib inline
import matplotlib.pyplot as plt

# 1. Prepare data
x = [1,2,3,4]
y = [10,20,30,40]

# 2. Setup plot
fig, ax = plt.subplots(figsize=(8,8)) # width & height 

# 3. Plot the data
ax.plot(x,y)

# 4. Customize Plot
ax.set(title="Simple Plot", 
        xlabel="X - Put your X label TITLE here",
        ylabel="Y - Put your y label TITLE here")


# 5. Display
plt.show()

我无法复制这个问题。您的代码对我来说运行得很好,这些字符串在
xlabel
ylabel
中可以互换。我通过打开一个新的终端并重新运行代码解决了同样的问题谢谢,这很有效。至于我的代码,毕竟,重启解释器已经成功了。对不起@neptune36也许是改变公认答案的最好办法,沃尔芬斯似乎已经设法以同样的方式打破了这一点,所以这可能更有用谢谢你给我贴标签。我不知道这个5岁的问题得到了如此多的关注!我也认为这也是问题所在!我时常犯这个错误。谢谢是的,我想这也是我的错误。谢谢你发现它!我发现这么多人都犯了这个错误这一事实非常有趣:)非常说明问题。它指出了不陷入这种错误的重要性。谢谢这应该是正确的答案。这完全是我的问题,很可能是每个人的问题。这与问题完全无关。代码答案很好,但最好包含一些代码工作原理的描述。你实际上也没有帮助任何人。问题中有一个错误,您还没有解释为什么会发生这种情况,或者您的代码中有什么修正来改变这种情况。