使用matplotlib pyplot绘制实时饼图

3

代码:

import matplotlib.pyplot as plt
from time import sleep
for i in range(100):
    plt.pie([100-i,i])
    sleep(1)
    plt.show()

enter image description here

我的代码问题:

  • 每当 plt.pie() 的值发生变化并绘制饼图时,for 循环的执行似乎会停止,我必须关闭饼图窗口才能恢复 for 循环的执行。

我的目标:

  • plt.pie() 显示其值的实时变化,而不会阻塞 for 循环的执行。

谢谢。


1
请查看 matplotlib 动画,这些动画是专门创建的,以便能够在事件循环内运行代码,并因此避免此类问题。 - ImportanceOfBeingErnest
2个回答

1
在你的for循环中添加plt.close()
import matplotlib.pyplot as plt
from time import sleep
for i in range(100):
    plt.pie([100-i,i])
    sleep(1)
    plt.show()
    plt.close()

这个不起作用。 plt.show() 似乎也阻塞了 plt.close() 函数的执行。 - Ketan Ramteke
如果您在for循环的第一行添加plt.figure(),并删除plt.show()会发生什么? - onno
我使用了plt.draw()和plt.pause(),现在它可以工作了。plt.draw()是一个非阻塞函数,因此它不会停止循环的执行。 - Ketan Ramteke

0

已修复。

import matplotlib.pyplot as plt
from time import sleep
for i in range(100):
   plt.pie([100-i, i])
   plt.pause(.001)
   plt.draw()
   sleep(1)

plt.show() 是一个阻塞函数,所以改用 plt.draw() 以及 plt.pause() 来替代。现在它按预期工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接