【问题标题】:Python matplotlib error: "maximum recursion depth exceeded"Python matplotlib 错误:“超出最大递归深度”
【发布时间】:2017-08-24 18:46:33
【问题描述】:

我正在使用 Python 和 matplotlib 库。

我运行了一段很长的代码,一路上创建了多个图形。

我做了很多次这样的事情:

plt.figure()
plt.plot(x, y)
plt.grid('on')
plt.close()

然后,在某些时候,我得到了错误:

More than 20 figures have been opened. Figures created through the pyplot interface (matplotlib.pyplot.figure) are retained until explicitly closed and may consume too much memory.

错误对我来说很清楚,但是:我确实调用了“plt.close()”。

现在我正在写这篇文章,我意识到也许 plt.close() 必须采用特定的限定符才能关闭什么数字?像 plt.close(1) 等。我想我可以使用 plt.close('all'),但是如果我只想关闭最近的数字呢?

【问题讨论】:

  • 我相信你不需要调用 plt.figure()。您可以尝试不使用该代码行并告诉我们吗?
  • @Outis,感谢您的回复。所以我阅读了链接,但仍然不确定为什么它不起作用: plt.close() "关闭一个窗口,这将是当前窗口" ?你知道发生了什么吗?
  • 你什么时候真正得到递归错误?您发布的警告似乎无关。
  • 想象一下代码包裹在一个循环中,正如我在代码本身之前所说的那样:我多次调用它。

标签: python matplotlib


【解决方案1】:

问题中的代码应该可以正常工作。由于您在每个循环步骤中关闭图窗,因此只会打开一个图窗。

最小的例子,不会产生任何错误:

import matplotlib.pyplot as plt

for i in range(30):
    plt.figure()
    plt.plot(range(i+3), range(i+3))
    plt.grid('on')
    plt.close()

plt.show() # doesn't show anything since no figure is open

所以错误的原因一定在代码的其他地方。

【讨论】:

  • 实际上,当我注释掉“plt.close()”时,我得到了错误。所以你是对的:我一定忽略了代码中的某些内容。谢谢。
【解决方案2】:

您应该直接对 matplotlib 对象进行操作。它不那么模棱两可了:

fig, ax = plt.subplots()
ax.plot(x, y)
...
plt.close(fig)

【讨论】:

  • 仅仅因为我有很多 plt.figure() 调用和关注 plt.(...),我可以逃脱: fig = plt.figure() plt.plot(x, y) plt.close(图)
  • 是的,但我不知道你为什么想要。将精神负担从电脑转移到自己身上。如果您经常重复此代码,请编写一个函数。
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2018-12-03
  • 2015-08-21
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多