[ipywidgets] 24. Dropdownでデータを選択してそのヒストグラムを表示(matplotlib & seaborn)

ipywidgets

はじめに

jupyter notebook, labで対話的な操作ができる機能(ipywidgets)のドロップダウンでデータを選択してそのヒストグラムを表示する方法について説明する。

matplotlibの場合

コード

コードをダウンロード(.pyファイル)コードをダウンロード(.ipynbファイル)

解説

モジュールのインポートなど

jupyter labでインタラクティブな操作をするには、冒頭で%matplotlib widgetとする。
jupyter lnotebookの場合は%matplotlib notebookとなる。
所定のGUIにより別ウインドウで表示するには、%matplotlibとする。

バージョン

データの作成

np.logspace(3,5,3)で[1000,10000,100000]の配列を作成できる。
np.random.normal(0,1,i)で平均値0、標準偏差1の正規分布に従う乱数をi個作成する。

ヒストグラムデータの作成

np.histogramでヒストグラムのheightとbinのデータを作成する。heightデータ,binデータをそれぞれ空のリストに入れる。

Dropdownの設定

optionsで[(‘data1’, 0), (‘data2’, 1), (‘data3’, 2)]のようにすると、data1を選択したときに0が返される。valueは初期値となる。

@interactでipywidgetsを有効にする。
f(dd)はドロップダウンを選択するたびに実行される。
data1などから任意のものを選択すると、ax.cla()で図を初期化してから、すきまが開かないようにwidthを調整し、ax.barで各データのヒストグラムを表示する。データ数1000のdata1のヒストグラムは下図のようになる。

data2の場合

data数が1万のdata2のヒストグラムは下図のようになる。

data3の場合

data数が10万のdata3のヒストグラムは下図のようになる。

seabornの場合

コード

解説

Dropdownの設定

Dropdownの設定はmatplotlibの場合と同様に行う。

distplotでヒストグラムを表示

最初にdistplotを入れるからのリストを作成する。
リストの長さが1以上のときにのみaxx.pop().remove()でリスト内の要素を削除する。つまり、図がある場合に図を初期化する。
次に、選択したデータでsns.distplotを作成し、そのdistplotをリストに加えることで図を表示する。

data数1000のdata1のヒストグラムは以下のようになる。

data2の場合

data数10000のdata2のヒストグラムは以下のようになる。

data3の場合

data数100000のdata3のヒストグラムは以下のようになる。

参考

Widget List — Jupyter Widgets 7.5.1 documentation
numpy.random.normal — NumPy v1.15 Manual

コメント