Matplotlib ラッソデモ

PythonPythonBeginner
オンラインで実践に進む

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Matplotlib ライブラリを使って、ユーザーがラッソツールを使って一連の点を選択できるインタラクティブなプロットを作成する方法を学びます。また、コールバック関数を使って選択された点の色を変更する方法も学びます。

VM のヒント

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

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

学習中に問題に遭遇した場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

ライブラリのインポート

まず、この実験に必要なライブラリをインポートします。グラフを作成するために matplotlib と、ランダムなデータを生成するために numpy を使用します。

import matplotlib.pyplot as plt
import numpy as np

ラッソマネージャークラスの作成

次に、ラッソ機能を処理する LassoManager クラスを作成します。__init__ メソッドはプロットとコレクションオブジェクトを初期化します。callback メソッドは選択された点の色を変更し、on_presson_release メソッドはマウスイベントを処理します。

class LassoManager:
    def __init__(self, ax, data):
        ## 点が選択されているかどうかの情報は、コレクションの配列に格納されます (0 = 外,1 = 内)。その後、これがマッピングされて青 (外) と赤 (内) に色付けされます。
        self.collection = RegularPolyCollection(
            6, sizes=(100,), offset_transform=ax.transData,
            offsets=data, array=np.zeros(len(data)),
            clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
        ax.add_collection(self.collection)
        canvas = ax.figure.canvas
        canvas.mpl_connect('button_press_event', self.on_press)
        canvas.mpl_connect('button_release_event', self.on_release)

    def callback(self, verts):
        data = self.collection.get_offsets()
        self.collection.set_array(path.Path(verts).contains_points(data))
        canvas = self.collection.figure.canvas
        canvas.draw_idle()
        del self.lasso

    def on_press(self, event):
        canvas = self.collection.figure.canvas
        if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
            return
        self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
        canvas.widgetlock(self.lasso)  ## ウィジェット描画にロックをかける

    def on_release(self, event):
        canvas = self.collection.figure.canvas
        if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
            canvas.widgetlock.release(self.lasso)

プロットの作成

次に、LassoManager クラスを使ってインタラクティブなプロットを作成します。np.random.rand 関数を使って、描画するランダムなデータポイントを生成します。

if __name__ == '__main__':
    np.random.seed(19680801)
    ax = plt.figure().add_subplot(
        xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
    manager = LassoManager(ax, np.random.rand(100, 2))
    plt.show()

まとめ

この実験では、Matplotlib を使って、ユーザーがラッソツールを使って一連の点を選択できるインタラクティブなプロットを作成する方法を学びました。また、コールバック関数を使って選択された点の色を変更する方法も学びました。この機能は、インタラクティブなデータ選択が必要な他のプロジェクトに拡張できます。