Juputer Notebookで関数を実行するとき、結果を見ながら何度も引数を変更して再実行したくなることはないでしょうか。
毎回コード中の引数を書き換えて実行しても良いのですが、それをGUIで実行できると便利です。
その便利な機能が、ウィジェットとして用意されているのでそれを紹介します。
使うのは ipywidgets です。
ドキュメントはこちら: Jupyter Widgets
実は細かい設定でGUIをいろいろ作れるのですが、今回はとりあえず最低限度の機能でGUIで操作しながらグラフを描写する関数を実行します。
実行するサンプル関数としてリサージュ曲線を描く関数を用意しました。
import numpy as np
import matplotlib.pyplot as plt
def lissajous_curve(a, b, delta, color="b", title="リサージュ曲線"):
t = np.linspace(0, 2, 601) * np.pi
x = np.cos(a * t)
y = np.sin(b * t + delta)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, aspect="equal", title=title)
ax.plot(x, y, color=color, )
plt.show()
一応説明しておくと、これは変数$t$を媒介変数とし、
$x=A\cos(at), y=B\sin(bt+\delta)$で表される点をプロットした曲線です。
($A,B$はただ図形の縮尺が変わるだけなので今回のコードは$1$で固定しました。)
さて、通常は$a, b, \delta$や色とタイトルに値を指定して実行することで目当てのグラフを描写しますが、
これらの引数をGUIで指定できる様にします。
方法は簡単で、ipywidgets.interact に先ほどの関数と、指定できる引数の範囲を渡すだけです。
引数の範囲は次の様に指定できます。
– (開始, 終了, ステップ) のタプル(ステップを省略したら1)
– 指定できる値のリスト
– テキスト
– 表示用文字列: 渡す値の辞書
from ipywidgets import interact
interact(
lissajous_curve,
a=(1, 10, 1),
b=(1, 10, 1),
delta=(0, 2*np.pi, 0.01),
title="リサージュ曲線",
# ただの配列で指定することも可能。
# color=["b", "k", "r", "g", "y", "m", "c"]
# 表示用文字列: 渡す値の辞書も使える
color={
"Blue": "b",
"Green": "g",
"Red": "r",
"Black": "k",
}
)
実行したのがこちらです。
Blogなので画像キャプチャになってしまっていますが、実際はスライドバーやドロップダウンで操作し、グラフを書き直すことができます。