Matplotlib:在背景图上迭代绘制/擦除一个图

时间:2018-10-13 18:55:14

标签: python-3.x matplotlib

我正在尝试完成一些非常基本的事情。希望能找到一些指示!

我想画两个圆圈:一个停留在屏幕上,另一个迭代地变大。对于变化的那个,我本质上是想使用一个循环来绘制和擦除,以便在每次迭代时都绘制一个更大的圆圈(在看起来似乎第二个动画的圆圈正在增长的情况下完成效果)。以下是到目前为止我已经设法解决的问题。它会随着每个循环将第二个圆逐渐增大,但不会擦除。

import matplotlib as plt
plt.use('TkAgg')
import matplotlib.pyplot as plt

#Initialize a variable
CHANGE = 0.3

#Make static 1st circle
circle1 = plt.Circle((0.5, 0.5), 0.2, color='white')
fig, ax = plt.subplots() 
plt.axis('off')
ax.add_artist(circle1)
fig.set_facecolor("black")

#Animate dynamic 2nd circle
def frange(start, stop, step): 
     i = start
     while i < stop:
         yield i
         i += step

for step in frange(0, .6, .01):     
    circle2 = plt.Circle((0.5, 0.5), CHANGE, color='gray', fill=False)  
    ax.add_artist(circle2)
    plt.draw()
    plt.pause(.001) 
    #plt.cla( )    
    CHANGE = CHANGE + step

注意:我尝试将plt.cla()添加到循环中。通过这种方式,我可以擦除/重画第2圈,但它似乎覆盖了原始的第1圈,而不是使它们在同一图中可见。

~~~~~~~~~~~~~

A)每个循环应该是什么:

B)不删除时的外观:

enter image description here

(通过PycharmCE使用Python3.6.5)

2 个答案:

答案 0 :(得分:1)

您应该简单地调用add_artist类的set_radius method,而不是多次调用remove()Circle。这样会更有表现。

答案 1 :(得分:0)

根据ImportanceOfBeingEarnest的评论将点子连接起来,以便像我这样的新手出现:

在循环中添加了以下已加星号的代码行:

for step in frange(0, .6, .01):  
    circle2 = plt.Circle((0.5, 0.5), CHANGE, color='gray', fill=False)  
    ax.add_artist(circle2)
    plt.draw()
    plt.pause(.001)            
    **circle2.remove()**
    CHANGE = CHANGE + step