[NumPy] 20.配列のスライスをボクセルグラフで可視化

matplotlib 3D

はじめに

配列の中の要素を取り出す場合は、スライスを使う。構文はx[start:stop:step] のようになり、デフォルトではstart=0, stop=配列のサイズ,step=1となっている。ここでは、いろいろなスライス方法をmatplotlib mplot3dのvoxelグラフで可視化した例について説明する。

コード

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

解説

モジュールのインポート

データの生成

0から24の要素をもつ5×5の配列を作成する。

figの作成

2×3で6個の3Dグラフを作成する。projection=’3d’とすることで、3Dグラフにしている。

ボクセルデータの設定

各グラフに表示するボクセルの設定をする。v1はすべてのグラフに表示するベースとなるボクセルで、v2からv7に各種スライス結果に適合するボクセルを生成する。

ボクセルグラフの設定

for文でax1からax6に共通する項目の設定をまとめて行う。
aa.voxels(v1, facecolors=’pink’, edgecolor=’grey’)でベースとなる5×5のボクセルを表示する。
aa.set_axis_off()で軸、軸ラベルを非表示にする。
aa.view_init(90, 270)で視点の設定を行い、90で真上とし、270で原点(0,0)が左下の位置に来るようにする。この設定を行わない場合、見た目は下のようになる。

軸ラベルなどを非表示としたので、aa.text2D(0.4, 0.15, “axis 0”, transform=aa.transAxes)などで軸ラベルを表示する。

ボクセルグラフの表示

ax1.voxels(v2, facecolors=’lime’, edgecolor=’green’)などで、スライスの適合する位置を緑としている。

ax1は下記のようになる。

ax2は第0軸が一個飛ばしとなり、第1軸の要素はすべてスライスされる。

ax3では、第0軸はすべてスライスされ、第1軸は1番目から一個飛ばしでスライスされる。

ax4は、-1とすることで各軸の最後の要素をスライスできる。

ax5の[-2:]は後ろから2番目以降から最後までという意味になる。

ax6はax1と見た目は同じとなるが、配列の順番が逆順となる。

図全体のタイトル名は、fig.suptitle(‘Visualization of slice’, fontsize=24)のようにすることで表示する。

参考

https://matplotlib.org/api/_as_gen/mpl_toolkits.mplot3d.axes3d.Axes3D.html
Indexing routines — NumPy v1.26 Manual

コメント