はじめに
このチュートリアルでは、Matplotlib を使って各一次 3D ビュープレーンを表示する「展開された」3D プロットを生成する方法を学びます。また、各ビューに必要な仰角、方位角、ロール角にラベルを付けます。この画像を印刷して折りたたんで箱にすることができ、各平面が箱の側面を形成します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
このチュートリアルで必要なライブラリをインポートして始めます。これには Matplotlib が含まれます。
import matplotlib.pyplot as plt
軸に注釈を付ける関数を定義する
後で各一次 3D ビュープレーンにそれぞれの角度を付ける注釈を付けるために使用するannotate_axes関数を定義します。
def annotate_axes(ax, text, fontsize=18):
ax.text(x=0.5, y=0.5, z=0.5, s=text,
va="center", ha="center", fontsize=fontsize, color="black")
一次 3D ビュープレーンとその角度を定義する
一次 3D ビュープレーンとそれに対応する仰角、方位角、ロール角を定義します。
views = [('XY', (90, -90, 0)),
('XZ', (0, -90, 0)),
('YZ', (0, 0, 0)),
('-XY', (-90, 90, 0)),
('-XZ', (0, 90, 0)),
('-YZ', (0, 180, 0))]
3D プロットのレイアウトを定義する
3D プロットのレイアウトをリストのリストを使って定義します。リスト内の '.' は空のサブプロットを表します。
layout = [['XY', '.', 'L', '.'],
['XZ', 'YZ', '-XZ', '-YZ'],
['.', '.', '-XY', '.']]
3D プロットを作成する
手順 4 で定義したレイアウトに基づいて 3D プロットを作成するために、subplot_mosaicを使用します。
fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'},
figsize=(12, 8.5))
各一次 3D ビュープレーンのプロパティを設定する
各一次 3D ビュープレーンのプロパティを設定します。これには、x 軸、y 軸、z 軸のラベル、投影タイプ、およびビュー角度が含まれます。
for plane, angles in views:
axd[plane].set_xlabel('x')
axd[plane].set_ylabel('y')
axd[plane].set_zlabel('z')
axd[plane].set_proj_type('ortho')
axd[plane].view_init(elev=angles[0], azim=angles[1], roll=angles[2])
axd[plane].set_box_aspect(None, zoom=1.25)
各一次 3D ビュープレーンにラベルを付ける
手順 2 で定義したannotate_axes関数を使用して、各一次 3D ビュープレーンにそれぞれの角度を付けてラベルを付けます。
for plane, angles in views:
label = f'{plane}\n{angles}'
annotate_axes(axd[plane], label, fontsize=14)
各一次 3D ビュープレーンの目盛りラベルと軸ラベルをカスタマイズする
各一次 3D ビュープレーンの目盛りラベルと軸ラベルをカスタマイズして、不要なラベルを削除します。
for plane in ('XY', '-XY'):
axd[plane].set_zticklabels([])
axd[plane].set_zlabel('')
for plane in ('XZ', '-XZ'):
axd[plane].set_yticklabels([])
axd[plane].set_ylabel('')
for plane in ('YZ', '-YZ'):
axd[plane].set_xticklabels([])
axd[plane].set_xlabel('')
中央のサブプロットにラベルを追加する
これが一次 3D ビュープレーンのプロットであることを示すために、中央のサブプロットにラベルを追加します。
label ='mplot3d primary view planes\n' + 'ax.view_init(elev, azim, roll)'
annotate_axes(axd['L'], label, fontsize=18)
axd['L'].set_axis_off()
3D プロットを表示する
plt.show() を使用して 3D プロットを表示します。
plt.show()
まとめ
このチュートリアルでは、Matplotlib を使って各一次 3D ビュープレーンを表示する「展開された」3D プロットを生成する方法を学びました。また、各ビューに必要な仰角、方位角、ロール角にラベルを付け、各一次 3D ビュープレーンの目盛りラベルと軸ラベルをカスタマイズしました。この画像を印刷して折りたたんで箱にすることができ、各面が箱の側面を形成します。