はじめに
scikit-imageのoctahedronを使い、異なるサイズの八面体の構造化要素をmatplotlibのadd_subplotで複数グラフ作成し、それぞれを回転させるアニメーション実装方法を解説します。
コード
解説
モジュールのインポートなど
バージョン
構造化要素の生成
辞書形式で大きさの異なる八面体を作成します。octahedron(5)を使用すると、半径5の八面体を生成できます。
構造化要素の表示
まず空のリスト(axes)を作成します。plt.figure(figsize=(12,8))でfigを作成し、fig.add_subplot(2, 3, idx)で図を順に生成していきます。projection=Axes3D.nameを指定することで3Dグラフを表示できます。
ボクセルグラフで立方体を表示するには、ax.voxels(struc,ec=’w’)を使用します。ecパラメータで各セルのエッジカラーを設定でき、この例ではwで白に設定しています。fcパラメータでは各セルの面の色を設定できます。
なお、ボクセルグラフの詳細については下記で解説しています。

ax.set(xlim=(-1,struc.shape[0]+1))などで各構造化要素のサイズに合わせて軸の範囲を設定します。
作成した図はaxes.append(ax)でリストに追加します。次の図を作成するためにidx += 1でインデックスを増やします。
アニメーションの関数
view_init関数をリスト内の各要素に適用し、図の表示角度を変化させることで回転アニメーションを作成します。
アニメーションの表示
FuncAnimationを使用してアニメーションを表示します。デフォルトのフレーム数は100であり、intervalを100msに設定した場合、全体で10秒のアニメーションになります。
HTML(ani.to_html5_video())
このコードを使用すると、Jupyter NotebookやJupyter Lab上でアニメーションを直接表示できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
matplotlib animationを使って複数の3Dグラフを同時に回転させるアニメーションを作成する方法を解説しました。add_subplotで複数グラフを配置し、FuncAnimationで各グラフの視点を同時に変更することで、効果的な可視化が実現できます。
参考

コメント