はじめに
この実験では、Matplotlib を使って RGB 色付きの 3D ボクセルプロットを作成する方法を学びます。ボクセルプロットは、データポイントを表すための立方体を使って、2D プロット上に 3D データを表現する方法です。RGB 色は、データの異なる値を表すために使用されます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
プロットを作成する前に、必要なライブラリをインポートする必要があります。この場合、Matplotlib と NumPy を使用します。
import matplotlib.pyplot as plt
import numpy as np
座標と色の定義
次に、プロット用の座標と色を定義する必要があります。この例では、RGB 色の値の 17x17x17 のグリッドを作成するために、np.indices関数を使用します。
r, g, b = np.indices((17, 17, 17)) / 16.0
また、グリッド内の値の間の中点を見つけるためのmidpoints関数も定義します。これは後で球体を作成するために使用されます。
def midpoints(x):
sl = ()
for _ in range(x.ndim):
x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0
sl += np.index_exp[:]
return x
球体の作成
次に、プロットの中心から一定距離以内にある RGB 値の条件を定義することで、プロット内に球体を作成します。
rc = midpoints(r)
gc = midpoints(g)
bc = midpoints(b)
sphere = (rc - 0.5)**2 + (gc - 0.5)**2 + (bc - 0.5)**2 < 0.5**2
色の結合
次に、RGB 色コンポーネントを形状が(17, 17, 17, 3)の単一の配列に結合します。
colors = np.zeros(sphere.shape + (3,))
colors[..., 0] = rc
colors[..., 1] = gc
colors[..., 2] = bc
ボクセルプロットの描画
最後に、ax.voxels関数を使ってボクセルプロットを描画できます。RGB 値、球体の条件、面の色、辺の色、および線幅を渡します。
ax = plt.figure().add_subplot(projection='3d')
ax.voxels(r, g, b, sphere,
facecolors=colors,
edgecolors=np.clip(2*colors - 0.5, 0, 1), ## brighter
linewidth=0.5)
ax.set(xlabel='r', ylabel='g', zlabel='b')
ax.set_aspect('equal')
plt.show()
まとめ
この実験では、Matplotlib を使って RGB 色付きの 3D ボクセルプロットを作成する方法を学びました。必要なライブラリをインポートし、座標と色を定義し、球体を作成し、色を結合し、ボクセルプロットを描画しました。ボクセルプロットは、2D プロット上で 3D データを表すための便利な方法であり、異なる種類のデータを表すために異なる色や形状でカスタマイズすることができます。