1. ホーム
  2. python

[解決済み] Jupyter Notebook: ウィジェットを使ったインタラクティブなプロット

2022-03-09 09:57:08

質問

ウィジェットに依存したインタラクティブなプロットを生成しようとしています。 問題は、スライダーを使ってパラメータを変更したとき、前のプロットの後に新しいプロットが作成されることです。

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 を使用し、notebook と jupyter を最新のバージョンに更新しました。)

どのように解決するのですか?

図を変更したいとのことですので、新規に作成するのではなく、以下の方法をお勧めします。

  1. インタラクティブなバックエンドを使用する。 %matplotlib notebook
  2. プロットの線を新しく引くのではなく、更新する。

つまり、コードは次のようになります。

%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);

または plt.show() のように この答え .