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

matplotlib 3D

はじめに

NumPyのロゴをmatplotlib mplot3dのvoxelグラフで表示する方法について説明する。

コード

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

解説

モジュールのインポート

データの生成

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_voxelのTrueの部分を#FFD65DC0として、Falseの部分を#7A88CCC0とした配列(facecolors)を得る。

np.ones(n_voxels.shape)でn_voxelsと同じ形状の要素がすべて1の配列(fillled)が得られる。
filled_2はfilledに関数explode()を適用したものとなる。

dataの形の2倍の値を要素としてもつsizeという配列を作り、sizeの各次元の大きさを1つ小さくした0の配列(data_e)を作り、data_eに2こ飛ばしでdataの要素を入れていく。facecolors、edgecolorsも同様にexplode()する。

(filled_2.shape) + 1の形状(n_voxelsの2倍の形状)の、要素として各配列のindexをもつ配列の値を2でわって切り捨てにした配列をつくる。

ボクセルとボクセルの間にgapをつくるため、x,y,zの各データのに適切な位置に対して0.05と0.95を足す。

ボクセルグラフの表示

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

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

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

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

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

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

参考

mpl_toolkits.mplot3d.axes3d.Axes3D — Matplotlib 3.1.1 documentation
3D voxel plot of the numpy logo — Matplotlib 3.1.1 documentation

コメント