はじめに
データ可視化において、コントーアプロットは一般的に 2 次元平面上に 3 次元データを表示するために使用されます。Matplotlib は、Python で広く使用されるグラフ作成ライブラリであり、コントーアプロットを含むさまざまな種類のプロットを作成する機能を提供します。この実験では、Matplotlib を使用してマスク付きコントーアプロットを作成する方法と、コーナーマスクの有効化と無効化の違いを示す方法を学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使用して練習します。
場合によっては、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリのインポート
Matplotlib を使用してマスク付きコントーアプロットを作成するには、次のライブラリをインポートする必要があります。
numpy:Python プログラミング言語用のライブラリで、大規模な多次元配列や行列をサポートします。matplotlib.pyplot:さまざまな種類のプロットを作成するためのシンプルなインターフェイスを提供する関数のコレクション。
import matplotlib.pyplot as plt
import numpy as np
プロット用のデータ作成
このステップでは、コントーアプロットにプロットするデータを作成します。np.meshgrid()関数を使用して点のグリッドを作成し、その後、サイン関数とコサイン関数を使用してz値を計算します。
## Data to plot.
x, y = np.meshgrid(np.arange(7), np.arange(10))
z = np.sin(0.5 * x) * np.cos(0.52 * y)
データのマスク化
このステップでは、ブールマスクを使用して一部のz値をマスクします。np.zeros_like()関数を使用してmask配列を作成し、その後、一部の値をTrueに設定してマスクします。
## Mask various z values.
mask = np.zeros_like(z, dtype=bool)
mask[2, 3:5] = True
mask[3:5, 4] = True
mask[7, 2] = True
mask[5, 0] = True
mask[0, 6] = True
z = np.ma.array(z, mask=mask)
プロットの作成
このステップでは、contourf()関数を使用してマスク付きコントーアプロットを作成します。この関数には、作成したいプロットの種類に応じてcorner_mask引数をTrueまたはFalseに設定しながら、x、y、およびz配列を渡します。
corner_masks = [False, True]
fig, axs = plt.subplots(ncols=2)
for ax, corner_mask in zip(axs, corner_masks):
cs = ax.contourf(x, y, z, corner_mask=corner_mask)
ax.contour(cs, colors='k')
ax.set_title(f'{corner_mask=}')
## Plot grid.
ax.grid(c='k', ls='-', alpha=0.3)
## Indicate masked points with red circles.
ax.plot(np.ma.array(x, mask=~mask), y, 'ro')
plt.show()
結果の解釈
このステップでは、マスク付きコントーアプロットの結果を解釈します。corner_maskパラメータが、プロットの角の点がマスクされるかどうかを制御することがわかります。corner_maskをTrueに設定すると、コントーアプロットの角がマスクされ、Falseに設定するとマスクされません。また、マスクされた点は赤い円で示されていることもわかります。
まとめ
この実験では、Matplotlib を使ってマスク付きコントーアプロットを作成する方法を学びました。まず必要なライブラリをインポートし、次にプロットするデータを作成しました。その後、ブールマスクを使って一部のz値をマスクし、contourf()関数を使ってコントーアプロットを作成しました。最後に、結果を解釈し、コーナーマスクを有効にすると無効にするとの違いを観察しました。