[matplotlib 3D] 29. NumPyの以前のlogoをvoxelで表示

matplotlib 3D

はじめに

NumPyは科学技術計算のための強力なPythonライブラリで、多次元配列や行列計算に優れています。この記事では、NumPyの以前のロゴマークを3D空間に表現するためのMatplotlibのvoxelプロットの使い方を詳しく解説します。

コード

解説

モジュールのインポート

データの生成

Pythonにおいて、bool値は0ならFalse、0以外ならTrueとなります。そのため、np.zeros((4, 3, 4), dtype=bool)は4×3×4の全要素がFalseの配列を生成します。

n_voxels[0, 0, :] = Trueという操作は、n_voxels配列の[0, 0, :]の位置にあるすべての要素をTrueに設定します。

facecolors = np.where(n_voxels, ‘#FFD65DC0’, ‘#7A88CCC0’)

この命令は、n_voxelsのTrue要素に対応する位置に#FFD65DC0を、False要素に対応する位置に#7A88CCC0を割り当てた新しい配列(facecolors)を生成します。

np.ones(n_voxels.shape)を使用すると、n_voxelsと同じ形状で全要素が1の配列(filled)が生成されます。filled_2は、filledに関数explode()を適用した結果の配列です。

sizeという配列をdataの形の2倍の値を要素として作成し、sizeの各次元を1つ小さくした0の配列(data_e)を生成します。そしてdata_eに2つ飛ばしでdataの要素を挿入していきます。facecolorsとedgecolorsについても同様にexplode()関数を適用します。

配列の形状 (filled_2.shape) + 1(n_voxelsの2倍の大きさ)を持ち、各要素に配列のインデックスを格納し、それを2で割って切り捨てた配列を作成する。

ボクセルとボクセルの間にギャップを作るため、x、y、zの各データの適切な位置に0.05と0.95を加えます。

ボクセルグラフの表示

x,y,zがボクセルの左手前下の座標、filled_2で色をつける位置を指定しています。

ボクセルのshade効果をoffにした場合

ボクセル間の隙間なしとした場合

+=0, +=1とすると上のように隙間がなくなります。

ボクセル間の隙間を大きくした場合

+=0.2, +=0.8とすると上のように隙間が大きくなります。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

mpl_toolkits.mplot3d.axes3d.Axes3D — Matplotlib 3.5.0 documentation
3D voxel plot of the NumPy logo — Matplotlib 3.10.5 documentation

コメント