如何在Python/pylab中关闭或替换图形而不手动关闭每个图形?

3 投票
1 回答
2872 浏览
提问于 2025-04-16 21:23

我在很多网站上查找过,尝试了绘图、子图、一些基本的动画,还有其他各种方法,但无论怎么用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()注释掉了,这样可以产生一个不错的动画效果。如果你把它留在里面,窗口会不停地关闭和重新打开,这可能是你想要的效果,但在我看来并不是很实用。当然,你的体验可能会有所不同。

撰写回答