Matplotlib のインタラクティブ関数

Beginner

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

はじめに

この実験では、Matplotlib のインタラクティブ関数の使い方を学びます。これらのインタラクティブ関数には、ginput、waitforbuttonpress、および手動での clabel 配置が含まれます。この実験の目的は、Matplotlib でこれらの関数を使ってインタラクティブなプロットを作成する方法を理解することです。この実験が終了するとき、Matplotlib のインタラクティブ関数を使ってプロットを作成および変更できるようになります。

VM のヒント

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

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

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

3 点をクリックして三角形を定義する

このステップでは、3 点をクリックすることで三角形を定義します。これを達成するために、ginput 関数と waitforbuttonpress 関数を使用します。ginput 関数を使うと、マウスでプロット上の点を選択でき、waitforbuttonpress 関数はボタン押下イベントを待ちます。

import time
import matplotlib.pyplot as plt
import numpy as np

def tellme(s):
    print(s)
    plt.title(s, fontsize=16)
    plt.draw()

plt.figure()
plt.xlim(0, 1)
plt.ylim(0, 1)

tellme('You will define a triangle, click to begin')

plt.waitforbuttonpress()

while True:
    pts = []
    while len(pts) < 3:
        tellme('Select 3 corners with mouse')
        pts = np.asarray(plt.ginput(3, timeout=-1))
        if len(pts) < 3:
            tellme('Too few points, starting over')
            time.sleep(1)  ## Wait a second

    ph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)

    tellme('Happy? Key click for yes, mouse click for no')

    if plt.waitforbuttonpress():
        break

    ## Get rid of fill
    for p in ph:
        p.remove()

三角形の角からの距離に応じた等高線

このステップでは、三角形の角からの距離に応じて等高線を描きます。個々の点からの距離の関数を定義し、この関数に基づいて等高線を描きます。

## Define a nice function of distance from individual pts
def f(x, y, pts):
    z = np.zeros_like(x)
    for p in pts:
        z = z + 1/(np.sqrt((x - p[0])**2 + (y - p[1])**2))
    return 1/z

X, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))
Z = f(X, Y, pts)

CS = plt.contour(X, Y, Z, 20)

tellme('Use mouse to select contour label locations, middle button to finish')
CL = plt.clabel(CS, manual=True)

ズーム

このステップでは、プロットをズームインします。ズームボックスの 2 つの角を選択するために ginput 関数を、ズームを終了するために waitforbuttonpress 関数を使用します。

tellme('Now do a nested zoom, click to begin')
plt.waitforbuttonpress()

while True:
    tellme('Select two corners of zoom, middle mouse button to finish')
    pts = plt.ginput(2, timeout=-1)
    if len(pts) < 2:
        break
    (x0, y0), (x1, y1) = pts
    xmin, xmax = sorted([x0, x1])
    ymin, ymax = sorted([y0, y1])
    plt.xlim(xmin, xmax)
    plt.ylim(ymin, ymax)

tellme('All Done!')
plt.show()

まとめ

この実験では、Matplotlib のインタラクティブ関数を使ってプロットを作成および変更する方法を学びました。三角形を定義し、三角形の角からの距離に応じて等高線を描き、プロットをズームインするために、ginputwaitforbuttonpress、および手動でのclabel配置を使用しました。これらの関数を使うことで、ユーザーがデータと対話し、より詳細に探索できるインタラクティブなプロットを作成できます。