是否可以有多个PyPlot窗口?或者我只限于次要情节?

wne*_*ort 31 python plot interpreter matplotlib hang

我不确定如何更清楚地说出我的问题.基本上,PyPlot是否仅限于一个实例/窗口?我尝试的任何黑客或变通办法都会导致我的程序冻结或第二个pyplot窗口排队,直到第一个关闭.

Joe*_*ton 58

当然,只是打开一个新的数字:

import matplotlib.pyplot as plt

plt.plot(range(10))

plt.figure()
plt.plot(range(10), 'ro-')

plt.figure(), plt.plot(...)

plt.show() # only do this once, at the end
Run Code Online (Sandbox Code Playgroud)

如果你在默认的python解释器中运行它,这将无法工作,因为每个数字都需要输入gui的mainloop.如果您想在交互式shell中运行,请查看IPython.如果您只是正常运行(即将其放入文件并调用python filename.py),它将正常工作.

  • 这个答案(我错过了)隐含在你最后只能调用一次`plt.show()`.这将在http://stackoverflow.com/a/2399978/527489进一步讨论.如果多次调用plt.show(),那么它仍会执行OP提到的排队(阻塞每个窗口,直到前一个窗口关闭). (7认同)
  • 是否有更面向对象的方法来处理多个图形? (3认同)

j35*_*t3r 8

使用plt.figure()并使用一定数量的窗口是固定的:

plt.figure(200)
plt.plot(x)
plt.show()
Run Code Online (Sandbox Code Playgroud)

而对于另一个情节,请使用不同的数字:

plt.figure(300)
plt.plot(y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 如果数字不重要,可以简单地调用不带参数的`plt.figure()`,并分配一个新数字。请参阅 [文档](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html)。此外,使用多次调用 `show()` 可能不是您真正想要的,请参阅 /sf/answers/167998491/ (2认同)

MiL*_*iLe 6

你的问题的答案是否定的。您可以拥有任意数量的窗口。首先,只需输入

plt.figure(n) #n must be a different integer for every window
Run Code Online (Sandbox Code Playgroud)

为您想要的每一个新人物。其次,写

plt.show()
Run Code Online (Sandbox Code Playgroud)

仅在您想要绘制的所有内容的末尾出现一次(!)。这是两个直方图的示例:

plt.figure(1)
plt.hist(dataset1)
plt.figure(2)
plt.hist(dataset2)
plt.show()
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以用pyplot.show属性来做到这一点

例子:

plt.show(block=False)
Run Code Online (Sandbox Code Playgroud)