import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider # Create the initial parameters for the sine wave initial_amplitude = 1.0 initial_frequency = 1.0 initial_phase = 0.0 t = np.linspace(0, 2 * np.pi, 1000) # Time values def sine_wave(t, amplitude, frequency, phase): return amplitude * np.sin(frequency * t + phase) # Create the initial sine wave y = sine_wave(t, initial_amplitude, initial_frequency, initial_phase) # Set up the figure and axis fig, ax = plt.subplots() plt.subplots_adjust(bottom=0.3) # Adjust space for sliders line, = ax.plot(t, y, lw=2) ax.set_title('Interactive Sine Wave Demonstration') ax.set_xlabel('Time') ax.set_ylabel('Amplitude') ax.grid(True) ax.set_ylim(-2, 2) # Define sliders ax_amp = plt.axes([0.2, 0.2, 0.65, 0.03], facecolor='lightgray') ax_freq = plt.axes([0.2, 0.15, 0.65, 0.03], facecolor='lightgray') ax_phase = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor='lightgray') slider_amp = Slider(ax_amp, 'Amplitude', 0.1, 2.0, valinit=initial_amplitude) slider_freq = Slider(ax_freq, 'Frequency', 0.1, 5.0, valinit=initial_frequency) slider_phase = Slider(ax_phase, 'Phase', 0.0, 2 * np.pi, valinit=initial_phase) # Update function for sliders def update(val): amplitude = slider_amp.val frequency = slider_freq.val phase = slider_phase.val line.set_ydata(sine_wave(t, amplitude, frequency, phase)) fig.canvas.draw_idle() # Connect sliders to update function slider_amp.on_changed(update) slider_freq.on_changed(update) slider_phase.on_changed(update) # Display the interactive plot plt.show()