[matplotlib 3D] 22. 非構造三次元データの等高線(tricontour)

matplotlib 3D

はじめに

3次元の構造化されてないデータの等高線を表示するtricontourについて解説する。

コード

解説

angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)

endpoint=Falseで最後の2πは含まないようにできる。[1]

angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)

np.repeatは、配列を指定の数だけ繰り返すことができる。ここでは、n_radii=8回繰り返している。[2]
…は配列のすべての要素を返してくれる。[3]

angles[:, 1::2] += np.pi/n_angles

+= でanglesのすべての行の1列,3列, 5列,7列目にnp.pi/n_anglesを足した数値を返してくれる。[4]

x = (radii*np.cos(angles)).flatten()

flatten()で配列を一次元化。

triang = tri.Triangulation(x, y)

tri.Triangulationでx,yに対応する三角形の座標を求めることができる。このtrinagはいろんな情報が入っている。[5]

triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
                         y[triang.triangles].mean(axis=1))
                < min_radius)

等高線を表示させない範囲の設定、各三角形のx,yの平均値に対するベクトルの長さがmin_radiusより低いい場合、マスクがかかる。[6]

ax.tricontour(triang, z, cmap=plt.cm.CMRmap)

tricontour(triang, z)だけでプロットが可能。

maskの設定をしなかった場合

散布図でプロットした場合

参考

  1. 線形に等間隔な数列を生成するnumpy.linspace関数の使い方 – DeepAge
  2. numpy.repeat – Numpy and Scipy Documentation – SciPy.org
  3. Python: Ellipsis について – CUBE SUGAR CONTAINER
  4. Python入門 – 演算子
  5. Delaunay triangulation by Python – My Future Sight for Past
  6. 9.2. math — 数学関数 — Python 3.6.5 ドキュメント

コメント

  1. […] [matplotlib 3D] 22. 3D tricontourを塗りつぶしにした図。 […]