Matplotlib を使った図形の描画

PythonPythonBeginner
今すぐ練習

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

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

はじめに

この実験では、MatplotlibのRectangleSelectorとEllipseSelectorウィジェットを使って、最初のクリック位置から現在のマウス位置まで四角形または楕円を描画する方法を学びます。

VMのヒント

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

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

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

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

必要なライブラリをインポートして始めましょう:Matplotlib、Numpy、およびRectangleSelectorとEllipseSelectorウィジェット。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import EllipseSelector, RectangleSelector

選択コールバック関数を定義する

ユーザーが四角形または楕円を選択するたびに、選択コールバック関数が呼び出されます。この関数は、クリックと解放イベントを引数として受け取り、四角形または楕円の座標を表示します。

def select_callback(eclick, erelease):
    """
    Callback for line selection.

    *eclick* and *erelease* are the press and release events.
    """
    x1, y1 = eclick.xdata, eclick.ydata
    x2, y2 = erelease.xdata, erelease.ydata
    print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
    print(f"The buttons you used were: {eclick.button} {erelease.button}")

トグルセレクタ関数を定義する

ユーザーが「t」キーを押すたびに、トグルセレクタ関数が呼び出されます。この関数は、RectangleSelectorとEllipseSelectorウィジェットのアクティブ状態を切り替えます。

def toggle_selector(event):
    print('Key pressed.')
    if event.key == 't':
        for selector in selectors:
            name = type(selector).__name__
            if selector.active:
                print(f'{name} deactivated.')
                selector.set_active(False)
            else:
                print(f'{name} activated.')
                selector.set_active(True)

グラフとサブプロットを作成する

2つのサブプロットを持つグラフを作成します。1つはRectangleSelector用で、もう1つはEllipseSelector用です。

fig = plt.figure(layout='constrained')
axs = fig.subplots(2)

サブプロットに何かをプロットする

RectangleSelectorとEllipseSelectorの効果をユーザーが確認できるように、サブプロットに何かをプロットします。

N = 100000  ## If N is large one can see improvement by using blitting.
x = np.linspace(0, 10, N)

for ax in axs:
    ax.plot(x, np.sin(2*np.pi*x))  ## plot something

RectangleSelector と EllipseSelector ウィジェットを作成する

RectangleSelector と EllipseSelector ウィジェットを作成し、サブプロットに追加します。

selectors = []
for ax, selector_class in zip(axs, [RectangleSelector, EllipseSelector]):
    ax.set_title(f"Click and drag to draw a {selector_class.__name__}.")
    selectors.append(selector_class(
        ax, select_callback,
        useblit=True,
        button=[1, 3],  ## disable middle button
        minspanx=5, minspany=5,
        spancoords='pixels',
        interactive=True))
    fig.canvas.mpl_connect('key_press_event', toggle_selector)
axs[0].set_title("Press 't' to toggle the selectors on and off.\n"
                 + axs[0].get_title())

グラフを表示する

最後に、グラフをユーザーに表示します。

plt.show()

まとめ

この実験では、MatplotlibのRectangleSelectorとEllipseSelectorウィジェットを使って、最初のクリック位置から現在のマウス位置まで四角形または楕円を描画する方法を学びました。また、サブプロット付きのグラフを作成し、サブプロットに何かをプロットし、キー押下イベントを使ってウィジェットのアクティブ状態を切り替える方法も学びました。