matplotlib轴标签出现奇怪错误

时间:2014-06-09 12:10:14

标签: 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")
pylab.ylabel("Speed")

每次,我得到错误'TypeError:'str'对象不可调用'作为最后一行。如果我将y更改为x,一切都很好。如果我将x更改为y,我会得到相同的错误。但是,ylabel出现在ylabel的下拉列表中,因此函数确实存在,文档说字符串是唯一必要的参数,与xlabel完全相同(matplotlib.pyplot.ylabel(s,* args,** kwargs)和matplotlib.pyplot.xlabel(s,* args,** kwargs))。到底是怎么回事?

8 个答案:

答案 0 :(得分:88)

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

答案 1 :(得分:7)

编辑:此代码适用于干净运行,但您可能已更改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()

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

答案 2 :(得分:5)

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

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

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

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

奇怪的是,当内核仍在运行时重新导入库 NOT 工作。

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

答案 5 :(得分:1)

我在jupyter笔记本中也遇到了同样的问题,因此,如果您太过面对问题,只需重新启动内核即可解决该问题,那么代码中就不会有语法错误。

答案 6 :(得分:-1)

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

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

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

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

答案 7 :(得分:-1)

这可能会帮助您:

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