我正在尝试使用Matplotlib的圆和动画从选定的数据点模拟圆形冲击波的动画。但是我想不出一种方法来删除每个新框架中的旧圆圈。结果,随着半径的增加,我在画布上绘制了越来越多的圆圈- 像这样:
关于在matplotlib图上动画化圆形冲击波有什么建议吗?
到目前为止,我的代码是:
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation testData = np.random.rand(100,2)-[0.5, 0.5] fig, ax = plt.subplots() def init(): fig.clf() sctPlot, = ax.plot(testData[:,0], testData[:,1], ".") # i is the radius def animate(i): init() q = 20 #initial index for the starting position pos = testData[q,:] circle1=plt.Circle(pos,i,color='r',fill=False, clip_on = False) fig.gca().add_artist(circle1) def init(): sctPlot, = ax.plot(testData[:,0], testData[:,1], ".") return sctPlot, ani = animation.FuncAnimation(fig, animate, np.arange(0.4, 2, 0.1), init_func=init, interval=25, blit=False) plt.show()
我认为您set_radius每次都可以用来更改圆圈大小:
set_radius
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation testData = np.random.rand(100,2)-[0.5, 0.5] fig, ax = plt.subplots() circle1=plt.Circle(testData[20,:],0,color='r',fill=False, clip_on = False) ax.add_artist(circle1) # i is the radius def animate(i): #init() #you don't want to redraw the same dots over and over again, do you? circle1.set_radius(i) def init(): sctPlot, = ax.plot(testData[:,0], testData[:,1], ".") return sctPlot, ani = animation.FuncAnimation(fig, animate, np.arange(0.4, 2, 0.1), init_func=init, interval=25, blit=False) plt.show()
因此,您不必每次都删除和重绘补丁,我认为这样做可能更有效。