Matplotlib のスクロールイベント

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Matplotlib でスクロールイベントを使用する方法を段階的に案内します。スクロールイベントは、3D データの 2D スライスをナビゲートするために使用できます。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。

必要なライブラリをインポートする

まず、Matplotlib と NumPy を含む必要なライブラリをインポートする必要があります。

import matplotlib.pyplot as plt
import numpy as np

データを作成する

NumPy の ogrid 関数を使って 3D データを作成します。

x, y, z = np.ogrid[-10:10:100j, -10:10:100j, 1:10:20j]
X = np.sin(x * y * z) / (x * y * z)

IndexTracker クラスを作成する

IndexTracker クラスは、現在のスライスインデックスを追跡し、それに応じてプロットを更新します。

class IndexTracker:
    def __init__(self, ax, X):
        self.index = 0
        self.X = X
        self.ax = ax
        self.im = ax.imshow(self.X[:, :, self.index])
        self.update()

    def on_scroll(self, event):
        increment = 1 if event.button == 'up' else -1
        max_index = self.X.shape[-1] - 1
        self.index = np.clip(self.index + increment, 0, max_index)
        self.update()

    def update(self):
        self.im.set_data(self.X[:, :, self.index])
        self.ax.set_title(
            f'Use scroll wheel to navigate\nindex {self.index}')
        self.im.axes.figure.canvas.draw()

プロットを作成してスクロールイベントを接続する

Matplotlib の subplots 関数を使ってプロットを作成し、作成した IndexTracker オブジェクトを渡します。その後、mpl_connect を使ってスクロールイベントをグラフキャンバスに接続します。

fig, ax = plt.subplots()
tracker = IndexTracker(ax, X)

fig.canvas.mpl_connect('scroll_event', tracker.on_scroll)
plt.show()

まとめ

この実験では、Matplotlib のスクロールイベントを使って 3D データの 2D スライスをナビゲートする方法を学びました。現在のスライスインデックスを追跡し、それに応じてプロットを更新するために IndexTracker クラスを作成しました。最後に、プロットを作成し、スクロールイベントをグラフキャンバスに接続しました。