import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation def wave(t, frequency, amplitude, phase, speed): x = np.linspace(0, 4 * np.pi, 1000) y = amplitude * np.sin(frequency * (x - speed * t) + phase) return x, y def update(t, wave1_params, wave2_params): x1, y1 = wave(t, *wave1_params) x2, y2 = wave(t, *wave2_params) line1.set_data(x1, y1) line2.set_data(x2, y2) line_sum.set_data(x1, y1 + y2) return line1, line2, line_sum # 初始波形参数 wave1_params = [2, 1, 0, 1] # 频率、振幅、相位、速度 wave2_params = [3, 1, 0, 1] fig, ax = plt.subplots() ax.set_xlim(0, 4 * np.pi) ax.set_ylim(-2, 2) line1, = ax.plot([], [], label='Wave 1') line2, = ax.plot([], [], label='Wave 2') line_sum, = ax.plot([], [], label='Sum', linestyle='--') plt.legend() ani = FuncAnimation(fig, update, frames=np.arange(0, 10, 0.1), fargs=(wave1_params, wave2_params), blit=True) plt.show() 待改进之处
时间: 2023-09-11 16:06:56 浏览: 133
import numpy as np import matplotlib.pyplot as plt import math
这段代码实现了两个正弦波的动态叠加动画,但是还有一些改进的地方:
1. 函数命名不够清晰,建议将 `wave` 函数改为 `generate_wave`,更好地描述函数的作用。
2. 动画的帧数是写死的,不够灵活,可以根据动画的长度自动计算帧数,使动画更加流畅。
3. `wave1_params` 和 `wave2_params` 可能会改变,但是这个代码没有提供方便的方式进行修改。可以将它们定义为全局变量或者使用类的属性来方便地修改。
4. 动画的图例没有位置调整,可能会遮挡波形。可以使用 `plt.legend(loc='upper left')` 等方法来调整图例的位置。
5. 没有添加坐标轴标签和标题等信息,可以使用 `plt.xlabel()`、`plt.ylabel()`、`plt.title()` 等方法添加这些信息。
6. 动画可能会卡顿,可以添加 `blit=False` 参数来减少卡顿。
改进后的代码如下:
阅读全文