はじめに
この記事では、Matplotlibのvoxel機能を使用してNumPyロゴを3D表現し、グレースケールで色が徐々に変化するアニメーションを作成する方法を詳しく解説します。
コード
解説
モジュールのインポート
3Dグラフの作成
3Dグラフを作成するために、ax = fig.gca(projection=’3d’)と設定します。
Numpyロゴの設定
データの生成
n_voxels = np.zeros((4, 3, 4), dtype=bool)は、bool値の配列を作成します。numpy配列では0がFalse、0以外の値がTrueとなるため、この命令で4×3×4のすべてFalseの配列が生成されます。
n_voxels[0, 0, :] = Trueという操作で、n_voxelsの[0, 0, :]の部分がTrueに変更されます。このような一連のTrue設定により、NumPyロゴの「N」の形状が作られています。
facecolor, edgecolorの初期設定
n_voxelsの配列でTrueの部分もFalseの部分も初期値として’k’(黒)に設定します。facecolorはアニメーションの過程で変化させるため、最初はすべて黒にしています。また、edgecolorもすべてのボクセルで黒に統一しました。
データの拡張
filledはn_voxelsと同じ形状の、すべての要素が1の配列です。filled_2はfilledに下のexplode()関数を適用したものになります。
まず、dataの要素サイズの2倍の大きさを持つsize配列を作成します。次に、sizeの各次元から1を引いたサイズの0埋め配列(data_e)を生成し、その後data_eに2要素ごとにdataの値を配置していきます。
ボクセル間の隙間の設定
(filled_2.shape) + 1の形状の配列を作成し、各要素には配列のインデックスを格納します。その後、この値を2で割って切り捨てた要素を持つ新しい配列を生成します。さらに、各要素に+0.05などの値を加えることで、適切に隙間を作り出していきます。
アニメーションの設定
col_1とcol_2は0〜1の範囲のランダムな値で、np.where()関数を使ってTrueとFalseの位置にそれぞれ設定します。ボクセルグラフはax.voxels(x, y, z, filled_2, facecolors=fcolors_2, edgecolors=ecolors_2)で表示します。このとき、x、y、zはボクセルの左手前下の座標を表し、filled_2パラメータで色を適用する位置を指定しています。
アニメーションの表示
アニメーション関数を25ステップ実行し、200ms間隔で図を順次更新することで、合計5秒のアニメーションを作成します。jupyter notebook上では、HTML(ani.to_html5_video())を実行するだけでアニメーションを表示できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント