このパラメトリック方程式をプロットし、matplotlib の Slider ウィジェットを使用してプロットをインタラクティブにしようとしています。定数aとkの値を微調整して、プロットがどのように変化するかを確認できるようにしたいと考えています。これまでのところ作成できましたが、スライダーはインタラクティブですが (つまり、スライダーの値を変更できます)、スライダーの値を変更してもプロットにはまったく影響しません。私は自分が間違っていることを理解できませんでした。これが私のコードです。私を正しい方向に向けるか、何らかの助けを提供していただければ幸いです。ありがとう。
注意: 初期値 (a_init と k_init) はランダムであり、何の意味もありません。しかし、問題は彼らにあるとは思いません。
from matplotlib.widgets import Slider
import numpy as np
import matplotlib.pyplot as plt
a_init = 15
k_init = 25
t = np.linspace(0, 2*np.pi, 100)
x = 2*k_init*np.cos(t)-a_init*np.cos(k_init*t)
y = 2*k_init*np.sin(t)-a_init*np.sin(k_init*t)
fig = plt.figure(figsize=(8,8))
parametric_ax = plt.axes([0.1, 0.2, 0.8, 0.65])
slider_ax = plt.axes([0.1, 0.03, 0.8, 0.05])
slider2_ax = plt.axes([0.1, 0.10, 0.8, 0.05])
plt.axes(parametric_ax)
parametric_plot, = plt.plot(x, y)
a_slider = Slider(slider_ax, 'a', 0, 1000, valinit=a_init)
k_slider = Slider(slider2_ax, 'k', 0, 1000, valinit=k_init)
def update(a, k):
parametric_plot.set_ydata((2*k*np.cos(t)-a*np.cos(t*k)), (2*k*np.sin(t)-a*np.sin(t*k)))
fig.canvas.draw_idle()
a_slider.on_changed(update)
k_slider.on_changed(update)
plt.show()