はじめに
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 のCircleとpathpatch_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_xlim、set_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 式を書き、軸の表示範囲を設定しました。