はじめに
matplotlib mplot3dで作成する3Dグラフ上に、直方体を表示する方法について説明する。
コード

解説
モジュールのインポート
バージョン
3Dグラフの設定
データの生成
tはxy平面の媒介変数で、zは高さ方向のデータ。
tとzでmeshgridを作成することで、3次元プロットできるようにする。
直方体はスーパー楕円の式から生成する。

[matplotlib animation] 17. スーパー楕円(Superellipse)
matplotlib FuncAnimationによるスーパー楕円のアニメーションについて説明する。
スーパー楕円は↓の式のように定義される。
$$|\frac{x}{a}|^p + |\frac{y}{b}|^p = 1$$p=1のときに四角形となる。
プロットするデータは媒介変数で生成する。
媒介変数θ(t)を0〜2πとする。
aはy=0におけるx軸の半径,bはx=0におけるy軸の半径となる。
ここでは、cとsをそれぞれcos(t)とsin(t)としている。
スーパー楕円を媒介変数表示すると↓のようになる。
$$x(t) = |cost|^\frac{2}{p}\cdot a sgn(cost)\\y(t) = |sint|^\frac{2}{p}\cdot b sgn(sint)$$直方体データの回転

[matplotlib animation] 3.球のz軸回転アニメーション
matplotlibのmplot3dで作成した球のsurface plotをZ軸に対して回転させたアニメーションについて解説します。
↑のときと同様の方法で回転して、スーパー楕円で生成する四角の各辺をx,y軸に並行にする。
原点を中心に角度γ回転したときのx,yは↓のようになる。
回転したときの図は↓のようになる。

底面と上面の設定
底面と上面はRectangleで作成する。
Rectangleで四角が描くことができる。xyに四角形の左下の座標、widthに幅(x軸方向長さ),heightに高さ(y軸方向長さ)を指定する。ここでは、np.min(),np.max()を用いて設定している。
2次元データを3次元空間上にプロットするため、art3d.pathpatch_2d_to_3dを用いた。zdir=”z”として、zにプロットしたいz軸方向の高さを指定することで、指定の高さに四角形を表示できる。
軸範囲、軸ラベルの設定
3Dグラフの表示
回転アニメーション
作製した図を回転させると以下のようになる。
回転アニメーションは以下の記事を参考にして作成した。

[matplotlib 3D] 14. 3Dグラフの回転アニメーション
matplotlib mplot3d のグラフの回転アニメーション
参考
matplotlibでrectangleを描く | mwSoft

Superellipse - Wikipedia
コメント