每次迭代后如何清除MatPlotLib动画

时间:2020-06-10 18:15:36

标签: python-3.x matplotlib

我已经搜索了好几个小时,却找不到直接的答案,或者也许因为我是菜鸟,所以我不知道如何实现其中的一些。

我制作了一个动画,将正弦波加在一起,并将其绘制到屏幕上。问题是,当它从头开始循环时,一切仍然存在。之前的地块尚未清除。我希望它循环播放并从头开始具有空白背景。我尝试了clf(),cla()函数,但无法弄清楚。

这是我的代码,任何帮助将不胜感激:

import math as m
import numpy as np
from matplotlib import animation
import matplotlib.pyplot as plt
from enum import Enum

class Parity(Enum):
    EVEN = 0
    ODD = 1
    BOTH = 2

def makeSine(list, order):
    sinList = []
    for num in list:
        sinList.append(m.sin(order * num) / order)
    return sinList

def init():
    for each in lines:
        each.set_data([], [])
    line.set_data([], [])
    return lines,line

def animate(i):
    i = i % numHarmonics
    # if i<=0:
    for each in lines:
        each, = ax.plot([], [], lw=0.8)
        each.set_data([time], [harmonics[i]])
    harmNumText.set_text(f"Harmonics: {i}")
    line.set_data(time, additions[i])  # Prints sum
    return [lines, line]

harmonicSeries = Parity.ODD
numHarmonics = 3  # 1=fundamental
time = np.arange(0, 50, 0.1)

fig = plt.figure(figsize=(8, 4))  # Animation details
ax = plt.axes(xlim=(0, 50), ylim=(-3, 3))

harmonics = []  # values of harmonic
additions = []  # sums
lines = []

for i in range(1, numHarmonics + 2):  # Create fundamental and harmonics
    if i == 1:
        harmonics.append(makeSine(time, i))
        additions.append(harmonics[0])  # No previous iterations to add to
        a, = ax.plot([], [], lw=2)
        a.set_data(time, harmonics[0])
        lines.append(a)
    else:
        if harmonicSeries == Parity.ODD:
            harmonics.append(makeSine(time, i * 2 - 1))
            additions.append(
                list(np.array(additions[i - 2] + np.array(harmonics[i - 1]))))  # addition[1]=addition[0]+harmonics[1]
        elif harmonicSeries == Parity.EVEN:
            harmonics.append(makeSine(time, i * 2))
            additions.append(list(np.array(additions[i - 2] + np.array(harmonics[i - 1]))))
        else:
            harmonics.append(makeSine(time, i))
            additions.append(list(np.array(additions[i - 2] + np.array(harmonics[i - 1]))))
        a.set_data(time, harmonics[i - 1])
        lines.append(a)

plt.subplots_adjust(left=0.1, bottom=0.35)
harmNumText = ax.text(0.05, 1.01, '', transform=ax.transAxes, fontsize=20)  # Text
line, = ax.plot([], [], lw=2)
# line2, = ax.plot([], [], lw=2)
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=numHarmonics, interval=1000, blit=False)
plt.show()

0 个答案:

没有答案