3D 플롯에서 평면 객체 그리기

Beginner

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

소개

Matplotlib 는 Python 에서 널리 사용되는 데이터 시각화 라이브러리입니다. 다양한 종류의 플롯과 차트를 생성하기 위한 광범위한 기능을 제공합니다. Matplotlib 의 특징 중 하나는 3D 플롯에서 평면 객체를 그릴 수 있다는 것입니다. 이 랩에서는 Matplotlib 를 사용하여 3D 플롯에서 평면 객체를 그리는 과정을 안내합니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 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 플롯을 생성합니다. projection 매개변수는 3D 플롯을 생성하기 위해 '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-axis", zdir="z", size=.5, usetex=False,
       ec="none", fc="k")
text3d(ax, (12, 4, 0), "Y-axis", zdir="z", size=.5, usetex=False,
       angle=np.pi / 2, ec="none", fc="k")
text3d(ax, (12, 10, 4), "Z-axis", 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 수식을 작성하고, 축의 제한을 설정했습니다.