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

在Python/pylab中,如何关闭图形或替换图形而不必手动关闭每个图形?,python,matplotlib,plot,Python,Matplotlib,Plot,我已经搜索了很多站点,使用了绘图、子绘图、一些基本动画和其他迂回方式,但是尽管使用了close()、clf()等,图形还是不会关闭 我有这样的想法: import numpy from pylab import * import time fig = Figure() counter1 = 0 counter2 = 0 while counter1<5: counter1 = counter1+1

我已经搜索了很多站点,使用了绘图、子绘图、一些基本动画和其他迂回方式,但是尽管使用了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()
导入numpy
从派拉布进口*
导入时间
图=图()
计数器1=0
计数器2=0

当counter1开始时,有两个次要问题:首先,您确定这就是您实际运行的代码吗?睡眠在我的pylab版本中不是一个函数,所以你的导入时间似乎与你的调用不匹配,应该是时间。睡眠(0.5)。。第二,我根本不理解你的循环。看起来您正在绘制相同的东西5次,因为计数器1没有效果,您在暂停之前将每个点添加到散点图中。您是否试图逐点绘制x_列表/y_列表

如果您使用draw()而不是show(),我认为它应该可以工作;show()是结束()的关键。以下是你想要的吗

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(),因为这样它可以生成一个漂亮的动画。如果你把它放在里面,它会不断地关闭和重新打开窗户,这可能是你想要的,但在我看来不是很有用。当然是YMMV。

我做错了什么,我只是试图逐字逐句地运行您的示例。什么也没发生。使用python 2.6.6找到它,您需要调用
pylab.ion()
interactive on。我会找到答案的