一次 3D ビュープレーン

Beginner

This tutorial is from open-source community. Access the source code

はじめに

このチュートリアルでは、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 ビュープレーンの目盛りラベルと軸ラベルをカスタマイズしました。この画像を印刷して折りたたんで箱にすることができ、各面が箱の側面を形成します。