Matplotlib で 3D ボクセルプロットを作成する

Beginner

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

はじめに

この実験では、Matplotlib を使って円柱座標を使って 3D ボクセルプロットを作成する方法を学びます。このプロットは、.Axes3D.voxels の _x_、_y_、および z パラメータを使って 3D ボクセルプロットを作成する方法を示します。

VM のヒント

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

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

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

ライブラリのインポート

この実験に必要なライブラリをインポートするのが最初のステップです。matplotlib.pyplotnumpy、および matplotlib.colors を使用します。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors

中点関数の定義

次に、座標の配列の中点を計算するための midpoints 関数を定義します。この関数は後で rtheta、および z の中点を計算するために使用されます。

def midpoints(x):
    sl = ()
    for i 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 値の定義

このステップでは、座標 rtheta、および z を定義し、それぞれに RGB 値を付けます。

r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]
x = r*np.cos(theta)
y = r*np.sin(theta)

rc, thetac, zc = midpoints(r), midpoints(theta), midpoints(z)

## define a wobbly torus about [0.7, *, 0]
sphere = (rc - 0.7)**2 + (zc + 0.2*np.cos(thetac*2))**2 < 0.2**2

## combine the color components
hsv = np.zeros(sphere.shape + (3,))
hsv[..., 0] = thetac / (np.pi*2)
hsv[..., 1] = rc
hsv[..., 2] = zc + 0.5
colors = matplotlib.colors.hsv_to_rgb(hsv)

3D ボクセルプロットの作成

ここでは、ax.voxels 関数を使って 3D ボクセルプロットを作成します。パラメータとして xyz、および sphere を渡します。また、先ほど定義した colors 配列を使って facecolorsedgecolors を追加します。

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, sphere,
          facecolors=colors,
          edgecolors=np.clip(2*colors - 0.5, 0, 1),  ## brighter
          linewidth=0.5)

プロットの表示

最後に、plt.show() 関数を使ってプロットを表示します。

plt.show()

まとめ

この実験では、Matplotlib を使って円柱座標を用いて 3D ボクセルプロットを作成する方法を学びました。また、座標と RGB 値を定義する方法と、ax.voxels 関数を使って 3D ボクセルプロットを作成する方法も学びました。