如何在Python/pylab中关闭或替换图形而不手动关闭每个图形?
我在很多网站上查找过,尝试了绘图、子图、一些基本的动画,还有其他各种方法,但无论怎么用close()、clf()等命令,图形窗口就是关不掉。
我有这样的代码:
import numpy
from pylab import *
import time
fig = Figure()
counter1 = 0
counter2 = 0
while counter1<5:
counter1 = counter1+1
while counter2<10:
scatter(x_list[counter2], y_list[counter2], hold = 'on') ### x_list and y_list are just lists of random numbers
counter2 = counter2 + 1
show()
sleep(0.5)
close()
我在寻找任何解决办法,就像上面提到的那样。绘图、子图、动画……
1 个回答
3
首先,有两个小问题需要确认:第一,你确定这是你实际运行的代码吗?在我用的pylab版本中,sleep并不是一个函数,所以你导入的time和你调用的sleep不太匹配,应该是time.sleep(0.5)。第二,我完全不明白你的循环是怎么回事。看起来你是在重复绘制同样的东西5次,因为counter1没有起到作用,而且你在暂停之前就把每个点加到了散点图上。你是想逐个绘制x_list和y_list中的点吗?
如果你用draw()代替show(),我觉得应该可以正常工作;因为show()会导致close()的执行。下面的代码是不是更接近你想要的效果?
import time
from pylab import *
ion()
# test data
x = arange(0, 10, 0.5)
y = 10*x+exp(x)*abs(cos(x))
for j in range(len(x)):
if j > 0: scatter(x[:j], y[:j])
# assuming we don't want the limits to change
xlim(0, 10)
ylim(0, 1000)
draw()
time.sleep(2)
#close()
注意,我把close()注释掉了,这样可以产生一个不错的动画效果。如果你把它留在里面,窗口会不停地关闭和重新打开,这可能是你想要的效果,但在我看来并不是很实用。当然,你的体验可能会有所不同。