ウィジェットに依存するインタラクティブなプロットを生成しようとしています。私が抱えている問題は、スライダーを使用してパラメーターを変更すると、前のプロットの後に新しいプロットが実行されることです。代わりに、パラメーターに従って1つのプロットのみが変更されることを期待します。
例:
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
def plot_func(freq):
x = np.linspace(0, 2*np.pi)
y = np.sin(x * freq)
plt.plot(x, y)
interact(plot_func, freq = widgets.FloatSlider(value=7.5,
min=1,
max=5.0,
step=0.5))
スライダーを4.0に移動した後、次のことができます。
一方、スライダーを動かすと、数字が1つだけ変わります。どうすればこれを達成できますか?
(Python 2.7、matplotlib 2.0を使用しています。ノートブックとjupyterを最新バージョンに更新しました。詳細が必要な場合はお知らせください。)
新しい図を作成する代わりに、図を変更したいので、次の方法をお勧めします。
%matplotlib notebook
_したがって、コードは次のようになります。
_%matplotlib notebook
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(x, np.sin(x))
def update(w = 1.0):
line.set_ydata(np.sin(w * x))
fig.canvas.draw_idle()
interact(update);
_
または、 this answer のようにplt.show()
を使用することもできます。
これは、jupyterおよび/またはipywidgetsの最後のバージョンで導入された問題(?)です。私が見つけた回避策の1つは、_plot_func
_の最後にplt.show()
行を追加することでした。