Matplotlib を使ったインタラクティブな三角測量プロットの作成

Beginner

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

はじめに

この実験では、Matplotlib を使って三角測量プロットを作成する方法を学びます。Triangulation オブジェクトを作成する方法、TriFinder オブジェクトを使う方法、およびカーソルの下の三角形を強調表示するためのインタラクティビティを設定する方法を学びます。

VM のヒント

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

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

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

Triangulation オブジェクトを作成する

まず、Triangulation オブジェクトを作成する必要があります。matplotlib.triからTriangulationクラスを使用します。この例では、ランダムなデータで Triangulation オブジェクトを作成します。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.tri import Triangulation

## Generate random data
x = np.random.rand(10)
y = np.random.rand(10)
triang = Triangulation(x, y)

TriFinder オブジェクトを作成する

カーソルの下の三角形を見つけるには、TriFinder オブジェクトを作成する必要があります。get_trifinder()メソッドを使用して、Triangulation オブジェクトからデフォルトの TriFinder オブジェクトを取得できます。

trifinder = triang.get_trifinder()

プロットを設定する

ここで、プロットを設定することができます。plt.subplots()を使用して、グラフと軸のオブジェクトを作成します。その後、ax.triplot()を使用して三角測量をプロットします。

fig, ax = plt.subplots()
ax.triplot(triang)

カーソルの下の三角形を強調表示する

マウスをプロット上に移動させると、カーソルの下の三角形を強調表示したいと思います。これを行うには、カーソルの下の三角形の頂点で更新されるPolygonオブジェクトを作成します。ax.add_patch()を使用して、ポリゴンをプロットに追加します。

from matplotlib.patches import Polygon

polygon = Polygon([[0, 0], [0, 0], [0, 0]], facecolor='y')
ax.add_patch(polygon)

また、カーソルの下の三角形の頂点でポリゴンの頂点を更新するupdate_polygon()関数も作成します。

def update_polygon(tri):
    if tri == -1:
        points = [0, 0, 0]
    else:
        points = triang.triangles[tri]
    xs = triang.x[points]
    ys = triang.y[points]
    polygon.set_xy(np.column_stack([xs, ys]))

インタラクティビティを設定する

カーソルの下の三角形を更新するために、インタラクティビティを設定する必要があります。motion_notify_eventを使用して、マウスがプロット上を移動したときを検出します。TriFinder オブジェクトを使用してカーソルの下の三角形を取得し、三角形の頂点でポリゴンを更新し、三角形のインデックスでプロットのタイトルを更新するon_mouse_move()関数を作成します。

def on_mouse_move(event):
    if event.inaxes is None:
        tri = -1
    else:
        tri = trifinder(event.xdata, event.ydata)
    update_polygon(tri)
    ax.set_title(f'Triangle {tri}')
    event.canvas.draw()

fig.canvas.mpl_connect('motion_notify_event', on_mouse_move)

プロットを表示する

最後に、plt.show()を使用してプロットを表示できます。

plt.show()

まとめ

この実験では、Matplotlib を使って三角測量プロットを作成する方法を学びました。TriangulationクラスとTriFinderクラスを使って三角測量を作成し、カーソルの下の三角形を見つけました。また、カーソルの下の三角形を強調表示するためにインタラクティビティを設定しました。