Не удается использовать два интерактивных окна в matplotlib
Нужно показать два интерактивных окна, и в каждом у меня есть два ползунка, но только во втором окне это работает. В первом все ползунки статичны, ничего двигать не получается
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.axes import Axes
from matplotlib.widgets import Slider, RadioButtons
funcs = {
'sin(x)': lambda x, amp, freq: amp * np.sin(2 * np.pi * freq * x),
'cos(x)': lambda x, amp, freq: amp * np.cos(2 * np.pi * freq * x)
}
figs = [plt.figure(1), plt.figure(2)]
for i in range(2):
fig = figs[i]
fig.subplots_adjust(left=0.25, bottom=0.25)
fig.suptitle(f"Волна {i + 1}")
x = np.linspace(0, np.pi * 3, 500)
ax: Axes = fig.add_subplot(111, xlim=(0, 3 * np.pi), ylim=(-5, 5), yticks=np.arange(-5, 5))
ax.set_aspect('equal')
ax.grid(True, which='both')
line, = ax.plot(x, funcs['sin(x)'](x, 1, 1 / (2 * np.pi)), linewidth=2, color='red')
amp_slider_ax = fig.add_axes([0.25, 0.15, 0.65, 0.03], facecolor="lightgoldenrodyellow")
amp_slider = Slider(amp_slider_ax, 'Amp', -5, 5, valinit=1)
freq_slider_ax = fig.add_axes([0.25, 0.1, 0.65, 0.03], facecolor="lightgoldenrodyellow")
freq_slider = Slider(freq_slider_ax, 'Freq', 0, 2, valinit=1 / (2 * np.pi))
func_radios_ax = fig.add_axes([0.025, 0.5, 0.15, 0.15], facecolor="lightgoldenrodyellow")
func_radios = RadioButtons(func_radios_ax, funcs.keys(), active=0)
def sliders_on_changed(val):
line.set_ydata(funcs[func_radios.value_selected](x, amp_slider.val, freq_slider.val))
fig.canvas.draw_idle()
def func_radios_on_clicked(label):
line.set_ydata(funcs[label](x, amp_slider.val, freq_slider.val))
fig.canvas.draw_idle()
amp_slider.on_changed(sliders_on_changed)
freq_slider.on_changed(sliders_on_changed)
func_radios.on_clicked(func_radios_on_clicked)
plt.show()