gpt4 book ai didi

python - 使用 Matplotlib 以非阻塞方式绘图

转载 作者:IT老高 更新时间:2023-10-28 21:07:44 24 4
gpt4 key购买 nike

我在尝试让 matplotlib 绘制函数而不阻塞执行时遇到问题。

我已尝试按照某些人的建议使用 show(block=False),但我得到的只是一个卡住的窗口。如果我只是调用 show(),结果会正确绘制,但执行会被阻止,直到窗口关闭。从我读过的其他线程中,我怀疑 show(block=False) 是否有效取决于后端。这个对吗?我的后端是 Qt4Agg。你能看看我的代码,如果你发现有问题告诉我吗?这是我的代码。

from math import *
from matplotlib import pyplot as plt
print(plt.get_backend())


def main():
x = range(-50, 51, 1)
for pow in range(1,5): # plot x^1, x^2, ..., x^4

y = [Xi**pow for Xi in x]
print(y)

plt.plot(x, y)
plt.draw()
#plt.show() #this plots correctly, but blocks execution.
plt.show(block=False) #this creates an empty frozen window.
_ = raw_input("Press [enter] to continue.")


if __name__ == '__main__':
main()

PS。我忘了说我想在每次绘制某些东西时更新现有窗口,而不是创建一个新窗口。

最佳答案

我花了很长时间寻找解决方案,发现this answer .

看起来,为了得到你(和我)想要的,你需要结合 plt.ion(), plt.show() (不是 block=False),最重要的是 plt.pause(.001) (或任何你想要的时间)。 pause需要,因为 GUI 事件发生在主代码休眠时,包括绘图。这可能是通过从 sleep 线程中获取时间来实现的,所以也许 IDE 会搞砸——我不知道。

这是一个适用于我在 python 3.5 上的实现:

import numpy as np
from matplotlib import pyplot as plt

def main():
plt.axis([-50,50,0,10000])
plt.ion()
plt.show()

x = np.arange(-50, 51)
for pow in range(1,5): # plot x^1, x^2, ..., x^4
y = [Xi**pow for Xi in x]
plt.plot(x, y)
plt.draw()
plt.pause(0.001)
input("Press [enter] to continue.")

if __name__ == '__main__':
main()

关于python - 使用 Matplotlib 以非阻塞方式绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com