Matplotlib: итеративно рисует / стирает один график поверх фонового графика - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь сделать что-то, надеюсь, довольно простое.Надеясь на несколько указателей!

Я хочу нарисовать два круга: один, который остается на экране, и один, который итеративно увеличивается.Для той, которая меняется, я, по сути, хочу использовать цикл для рисования и удаления, чтобы он рисовал больший круг на каждой итерации (выполняя эффект, когда кажется, что второй анимированный круг растет).Ниже то, что мне удалось до сих пор отработать.Он рисует второй круг, постепенно увеличиваясь с каждым циклом, но не стирая.

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

(Использование Python3.6.5 через PycharmCE)

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вместо нескольких вызовов add_artist и remove(), вам нужно просто вызвать 1005 * метод класса Circle .Это будет более производительным.

0 голосов
/ 18 октября 2018

Соединение точек, основанное на комментарии 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...