3D プロットにおける平面物体の描画

PythonPythonBeginner
オンラインで実践に進む

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Matplotlib は、Python における人気のあるデータ可視化ライブラリです。さまざまな種類のグラフやチャートを作成するための幅広い機能を提供しています。Matplotlib の特徴の 1 つは、3D プロットで平面物体を描画する機能です。この実験では、Matplotlib を使用して 3D プロットで平面物体を描画するプロセスを案内します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook にアクセスして練習します。

場合によっては、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

必要なライブラリをインポートする

必要なライブラリである Matplotlib、NumPy、および mpl_toolkits.mplot3d.art3d をインポートして始めましょう。

import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.art3d as art3d

3D プロットを作成する

Matplotlib のadd_subplot関数を使用して 3D プロットを作成します。3D プロットを作成するには、projectionパラメータを'3d'に設定します。

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

壁に円を描画する

Matplotlib のCirclepathpatch_2d_to_3d関数を使用して、3D プロットの x = 0 の「壁」に円を描画します。

p = Circle((5, 5), 3)
ax.add_patch(p)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")

軸にラベルを付ける

text3d関数を使用して手動で軸にラベルを付けます。この関数は、テキストの位置、表示するテキスト、三次元として扱う軸、およびその他のパラメータを受け取ります。

def text3d(ax, xyz, s, zdir="z", size=None, angle=0, usetex=False, **kwargs):
    """
    Plots the string *s* on the axes *ax*, with position *xyz*, size *size*,
    and rotation angle *angle*. *zdir* gives the axis which is to be treated as
    the third dimension. *usetex* is a boolean indicating whether the string
    should be run through a LaTeX subprocess or not.  Any additional keyword
    arguments are forwarded to `.transform_path`.

    Note: zdir affects the interpretation of xyz.
    """
    x, y, z = xyz
    if zdir == "y":
        xy1, z1 = (x, z), y
    elif zdir == "x":
        xy1, z1 = (y, z), x
    else:
        xy1, z1 = (x, y), z

    text_path = TextPath((0, 0), s, size=size, usetex=usetex)
    trans = Affine2D().rotate(angle).translate(xy1[0], xy1[1])

    p1 = PathPatch(trans.transform_path(text_path), **kwargs)
    ax.add_patch(p1)
    art3d.pathpatch_2d_to_3d(p1, z=z1, zdir=zdir)


text3d(ax, (4, -2, 0), "X 軸", zdir="z", size=.5, usetex=False,
       ec="none", fc="k")
text3d(ax, (12, 4, 0), "Y 軸", zdir="z", size=.5, usetex=False,
       angle=np.pi / 2, ec="none", fc="k")
text3d(ax, (12, 10, 4), "Z 軸", zdir="y", size=.5, usetex=False,
       angle=np.pi / 2, ec="none", fc="k")

床に LaTeX 式を書く

text3d関数を使用して、3D プロットの z = 0 の「床」に LaTeX 式を書きます。

text3d(ax, (1, 5, 0),
       r"$\displaystyle G_{\mu\nu} + \Lambda g_{\mu\nu} = "
       r"\frac{8\pi G}{c^4} T_{\mu\nu}  $",
       zdir="z", size=1, usetex=True,
       ec="none", fc="k")

表示範囲を設定してプロットを表示する

Matplotlib のset_xlimset_ylim、およびset_zlim関数を使用して、x 軸、y 軸、および z 軸の表示範囲を設定します。最後に、Matplotlib のshow関数を使用して 3D プロットを表示します。

ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)

plt.show()

まとめ

この実験では、Matplotlib を使用して 3D プロットに平面物体を描画する方法を学びました。3D プロットを作成し、壁に円を描画し、軸にラベルを付け、床に LaTeX 式を書き、軸の表示範囲を設定しました。