はじめに
この記事では、matplotlibのFuncAnimationを使用して、3Dグラフの軸範囲を更新するアニメーションの作成方法について解説しています。3D空間内でデータを表示しながら、視点や表示範囲を変更するアニメーション効果を実現する方法を、具体的なコード例とともに紹介しています。
コード
解説
モジュールのインポート
軸と軸ラベルの設定
視点を変える設定には、ax.view_init(elev=15, azim=-60)を使用します。
elevはElevation viewing angleの略で、視点の高さを設定します(デフォルト値は30)。
azimはAzimuthal viewing angleの略で、方位角を設定します(デフォルト値は-60)。
データの生成
双曲面は媒介変数でデータを生成するため、まずuとvを作成してからmeshgridします。双曲面の媒介変数表現は以下のようになります。
$$X = cosh(u)*cos(v)\\ Y = cosh(u)*sin(v)\\ Z = sinh(u)$$ここで、cをnp.linspace(0,10,100)として、0〜10まで100stepで変化させていきます。
アニメーションの設定
初期表示のためのグラフをplotにプロットしておきます。この際、後で参照できるよう[]でリスト形式にしておきます。
アニメーションでは古いプロットを消去する必要があります。3Dグラフの場合は、plot[0].remove()で消去できます。
パラメータcの部分をc[num]に設定することで、Zの値を順次増加させていきます。
zmin, zmax = ax.get_zlim()を使用して、現在表示中のグラフのz軸範囲を取得します。zminの初期値は-10に設定されています。Z[0,0]にはzの最小値が格納されているため、この値がzminより小さくなった場合、ax.set_zlim(2zmin, 2zmax)で軸範囲を2倍に拡大します。その後、plot[0]に新しい3Dグラフをプロットします。
アニメーションの表示
FuncAnimationを使用してアニメーションを表示します。updateのnumパラメータを100に設定しているため、フレーム数は100になります。interval=100に設定しているので、100フレーム×100ミリ秒=10,000ミリ秒=10秒のアニメーションが生成されます。
to_html5_video関数を使用してアニメーションをHTML5ビデオ形式に変換します。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
matplotlibのFuncAnimationを使用することで、3Dグラフの軸範囲を動的に更新するアニメーションを作成できます。これにより、データの特定部分にフォーカスしたり、異なる視点からデータを観察したりする効果的な可視化が可能になります。
参考


コメント