【问题标题】:How do plt.plot(x,y) and plt.show() work the way they do?plt.plot(x,y) 和 plt.show() 如何以它们的方式工作?
【发布时间】:2017-09-27 14:39:06
【问题描述】:

我想知道 ma​​tplotlib.pyplotplt.plot(x,y)plt.show() 命令之间的基本主干流程。

稍微详细一点,这段代码:

plt.plot(x , y)
plt.show()

显示所需的图表(没问题)。

另外,代码:

plt.plot(x , y)
plt.plot(p , q)
plt.show()

也可以正常工作。 它显示了由列表 x & y 和 p & q 创建的两个图。

现在这是我在 ipython 中动态编码时发现的非常有趣的东西。

In [73]: plt.plot(x , y)
#normal plotting function.
In [78]: plt.show()
#shows a graph as intended.
In [79]: plt.show()
#shows nothing.

现在,无论我调用多少次plt.show()(在我调用过一次之后)它都不会显示图表。 为什么会这样?

PS:据我了解,在此过程中可能会创建和删除一个对象。但我既不确定也不相信。

提前致谢。

【问题讨论】:

  • 我怀疑这确实是重复的。您可以保存数字等以重新显示 - 一旦 show() 完成它就完成了。 stackoverflow.com/questions/5524858/…
  • @doctorlove 是的,在发布我的问题之前,我确实偶然发现了超链接问题。我想知道这是怎么发生的(如果可能的话,为什么)。我明白一旦show() 被调用,它就完成了。问题是它是如何完成的

标签: python python-3.x matplotlib


【解决方案1】:

Pyplot 使用或者是所谓的“状态机”。它存储了许多图形和对当前轴和图形的引用。一旦show 被调用,所有的图形都会显示出来,一旦show 返回,它们就会从状态机中删除。

在随后对show 的调用中,不再显示任何数字,因此不显示输出。

因此有一些(可能是不成文或隐含的)假设show 在脚本中只被调用一次。

可能值得注意的是,尽管图形已从状态机中删除,但它们会一直保留在内存中,直到它们关闭为止。因此,它们可能会在某些情况下重复使用,具体取决于所需的工作流程。

【讨论】:

  • 根据链接主题的引用,它被明确编码,目的是作为脚本的最后一行调用一次。
  • 那么这个状态机行为是通过创建和删除对象来控制的,还是这个(状态机)概念完全不同?
  • 内部有确定的对象创建。如前所述,它们并没有被删除,而是从某种集合中删除。
  • 好的。我将详细了解这种状态机类型的工作。非常感谢。
猜你喜欢
  • 2011-08-21
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多