我已经搜索了好几个小时,却找不到直接的答案,或者也许因为我是菜鸟,所以我不知道如何实现其中的一些。
我制作了一个动画,将正弦波加在一起,并将其绘制到屏幕上。问题是,当它从头开始循环时,一切仍然存在。之前的地块尚未清除。我希望它循环播放并从头开始具有空白背景。我尝试了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()