はじめに
このチュートリアルでは、Matplotlib コレクションを使用したビジュアライゼーションの作成方法を案内します。このチュートリアルでは、LineCollection、PolyCollection、および RegularPolyCollection の使い方を紹介します。また、LineCollection と PolyCollection のオフセットと offset_transform キーワード引数を使って渦巻きの位置を設定する方法も紹介します。さらに、RegularPolyCollection を使って正多角形を作成する方法も紹介します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import collections, transforms
最初のステップは、必要なライブラリをインポートすることです。このチュートリアルでは、Matplotlib と Numpy を使用します。
渦巻きを作成する
nverts = 50
npts = 100
## いくつかの渦巻きを作成する
r = np.arange(nverts)
theta = np.linspace(0, 2*np.pi, nverts)
xx = r * np.sin(theta)
yy = r * np.cos(theta)
spiral = np.column_stack([xx, yy])
次のステップは、Numpy を使って渦巻きを作成することです。渦巻きを作成するために、sin と cos 関数を使用します。
オフセットを作成する
## 再現可能性のために乱数シードを固定する
rs = np.random.RandomState(19680801)
## いくつかのオフセットを作成する
xyo = rs.randn(npts, 2)
3 番目のステップは、Numpy を使ってオフセットを作成することです。オフセットを作成するために、乱数関数を使用します。
オフセットを使って LineCollection を作成する
col = collections.LineCollection(
[spiral], offsets=xyo, offset_transform=ax1.transData)
trans = fig.dpi_scale_trans + transforms.Affine2D().scale(1.0/72.0)
col.set_transform(trans)
col.set_color(colors)
ax1.add_collection(col, autolim=True)
ax1.autoscale_view()
ax1.set_title('LineCollection using offsets')
4 番目のステップは、オフセットを使って LineCollection を作成することです。オフセット付きの曲線を作成するために LineCollection を使用します。また、offset_transform を使って曲線の位置を設定します。
オフセットを使って PolyCollection を作成する
col = collections.PolyCollection(
[spiral], offsets=xyo, offset_transform=ax2.transData)
trans = transforms.Affine2D().scale(fig.dpi/72.0)
col.set_transform(trans)
col.set_color(colors)
ax2.add_collection(col, autolim=True)
ax2.autoscale_view()
ax2.set_title('PolyCollection using offsets')
5 番目のステップは、オフセットを使って PolyCollection を作成することです。曲線に色を塗りつぶすために PolyCollection を使用します。また、offset_transform を使って曲線の位置を設定します。
オフセットを使って RegularPolyCollection を作成する
col = collections.RegularPolyCollection(
7, sizes=np.abs(xx) * 10.0, offsets=xyo, offset_transform=ax3.transData)
trans = transforms.Affine2D().scale(fig.dpi / 72.0)
col.set_transform(trans)
col.set_color(colors)
ax3.add_collection(col, autolim=True)
ax3.autoscale_view()
ax3.set_title('RegularPolyCollection using offsets')
6 番目のステップは、オフセットを使って RegularPolyCollection を作成することです。オフセット付きの正多角形を作成するために RegularPolyCollection を使用します。また、offset_transform を使って多角形の位置を設定します。
連続するデータオフセットを作成する
## 一連の海流プロファイルをシミュレートし、0.1m/s ずつオフセットして
## 「ウォーターフォール」プロットまたは「スタガー」プロットと呼ばれるものを作成します。
nverts = 60
ncurves = 20
offs = (0.1, 0.0)
yy = np.linspace(0, 2*np.pi, nverts)
ym = np.max(yy)
xx = (0.2 + (ym - yy) / ym) ** 2 * np.cos(yy - 0.4) * 0.5
segs = []
for i in range(ncurves):
xxx = xx + 0.02*rs.randn(nverts)
curve = np.column_stack([xxx, yy * 100])
segs.append(curve)
col = collections.LineCollection(segs, offsets=offs)
ax4.add_collection(col, autolim=True)
col.set_color(colors)
ax4.autoscale_view()
ax4.set_title('Successive data offsets')
ax4.set_xlabel('Zonal velocity component (m/s)')
ax4.set_ylabel('Depth (m)')
ax4.set_ylim(ax4.get_ylim()[::-1])
7 番目のステップは、連続するデータオフセットを作成することです。連続するオフセット付きの曲線を作成するために LineCollection を使用します。
まとめ
このチュートリアルでは、Matplotlib コレクションを使ってグラフを作成する方法を紹介しました。LineCollection、PolyCollection、RegularPolyCollection を使って曲線や多角形を作成する方法を学びました。また、LineCollection と PolyCollection の offsets および offset_transform キーワード引数を使って渦巻きの位置を設定する方法も学びました。