使用 Matplotlib 以非阻塞方式绘图:解决执行问题
当尝试使用 Matplotlib 绘制函数而不停止执行时,您可能会遇到与 GUI 和后端交互相关的困难。一个常见的误解是 show(block=False) 的用法,它可能并不总是有效,具体取决于后端。
您提供的代码演示了 show(block=False) 的用法,但看起来您是在调用 show() 之前不使用 plt.ion()。 plt.ion() 激活交互模式,允许非阻塞绘图,您可以在其中绘制和暂停更新。
启用 plt.ion() 后,您可以调用 plt.show() 显示绘图窗口。该窗口将保持打开且非阻塞状态,允许您继续执行。但是,要查看更新后的绘图,您需要使用 plt.draw() 重新绘制画布,并使用 plt.pause(timeout) 暂停执行一小段时间。 plt.pause() 中的超时参数决定了暂停的长度(以秒为单位)。
在您的具体情况下,还需要注意的是,每次调用 plt.plot() 时,都会生成一个新绘图在同一窗口中创建。如果您想更新现有绘图,则应使用 plt.plot(x, y, color='r')。这将以红色绘制新数据点,同时保留现有绘图。
下面是代码的修订版本,应解决非阻塞问题并更新现有绘图:
<code class="python">import matplotlib.pyplot as plt import numpy as np def main(): plt.ion() # Activate interactive mode plt.show() # Display the plot window plt.axis([-50,50,0,10000]) x = np.arange(-50, 51) for pow in range(1,5): y = [Xi**pow for Xi in x] plt.plot(x, y, color='r') # Update the plot in red color plt.draw() plt.pause(0.001) # Pause for a brief period input("Press [enter] to continue.") if __name__ == '__main__': main()</code>
以上是如何使用 Matplotlib 以非阻塞方式绘图:为什么 `show(block=False)` 并不总是有效?的详细内容。更多信息请关注PHP中文网其他相关文章!