はじめに
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ファイル)
コメント