【问题标题】:Strange error with matplotlib axes labelsmatplotlib 轴标签的奇怪错误
【发布时间】:2014-07-29 23:28:45
【问题描述】:

我对 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))。这里到底发生了什么?

【问题讨论】:

  • 我无法重现此问题。您的代码对我来说运行良好,这些字符串在 xlabelylabel 中可以互换。
  • 我通过打开一个新的终端并重新运行代码解决了同样的问题

标签: python matplotlib axes


【解决方案1】:

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

【讨论】:

  • 我也认为这也是问题所在!我时不时地犯这个错误。谢谢!
  • 是的,我认为这也是我的错误。感谢您发现它!
  • 我发现很多人都遇到这个错误的事实很有趣:))
  • 非常有说明性。它指出了不陷入这种错误的重要性。谢谢
  • 这应该是正确接受的答案。这正是我的问题,很可能是每个人的问题。
【解决方案2】:

编辑:此代码可以正常运行,但您可能更改了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()

不能解决根本问题(这很难,因为我无法重现它),但也许它至少会达到你的目的。

【讨论】:

  • 谢谢,这行得通。至于我的代码,毕竟,重新启动解释器就可以了。很抱歉!
  • @neptune36 也许最好改变接受的答案,wolfins 似乎已经设法以同样的方式打破了这一点,所以这可能更有用
  • 感谢您标记我。我不知道这个 5 年前的问题得到了如此多的关注!
【解决方案3】:

这件事发生在我身上。 看来我所做的是 assign 一个字符串给 xlab 和 ylab 像:

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

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

同样,我使用的是 Jupyter,我不得不杀死 Jupyter 并从头开始重新运行它来解决这个问题。

奇怪的是,在内核保持运行的同时重新导入库并没有工作。

【讨论】:

    【解决方案4】:

    如果您分配 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' object is not callable'.

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        我在 jupyter notebook 中也遇到过同样的问题,所以如果你也面临着重启内核并修复它的问题,那么你的代码中没有任何语法错误。

        【讨论】:

          【解决方案7】:

          这可能会对您有所帮助:

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

          【讨论】:

          • 代码答案很好,但最好包含一些关于代码工作原理的描述。你实际上也没有帮助任何人。这个问题有一个错误,你没有解释为什么会发生这种情况,或者你的代码修复了什么来改变它。
          【解决方案8】:

          如果你是 win 可能你没有安装正确版本的 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是哪个版本

          【讨论】:

          • 这与问题完全无关。
          猜你喜欢
          • 1970-01-01
          • 2020-07-02
          • 1970-01-01
          • 2013-05-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多