3D 박스 표면 플롯

Beginner

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

소개

이 랩에서는 Python 과 Matplotlib 을 사용하여 3D 박스 표면 플롯을 생성하는 과정을 안내합니다. 우리는 차원을 정의하고, 가짜 데이터를 생성하며, 등고선 표면을 플롯합니다. 플롯의 제한을 설정하고, 가장자리를 플롯하며, 레이블과 zticks 를 설정하고, 줌 및 각도 뷰를 설정하고, 컬러바를 추가합니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

차원 정의

각 변의 길이에 대한 세 개의 변수, 즉 Nx, Ny 및 Nz 를 생성하여 상자의 차원을 정의합니다. 그런 다음 numpy 의 arange 메서드를 사용하여 X, Y 및 Z 에 대한 세 개의 메쉬 그리드를 생성합니다. 마지막으로, 평면 대신 상자를 생성하기 위해 Z 에 음수 값을 설정합니다.

import matplotlib.pyplot as plt
import numpy as np

## Define dimensions
Nx, Ny, Nz = 100, 300, 500
X, Y, Z = np.meshgrid(np.arange(Nx), np.arange(Ny), -np.arange(Nz))

가짜 데이터 생성

X, Y, Z 의 값을 기반으로 데이터를 계산하는 공식을 사용하여 플롯할 가짜 데이터를 생성합니다. 최소값이 0 보다 크도록 보장하기 위해 결과에 1 을 더합니다.

## Create fake data
data = (((X+100)**2 + (Y-20)**2 + 2*Z)/1000+1)

등고선 표면 플롯

각 표면에 대해 contourf 메서드를 사용하여 상자에 대한 등고선 표면을 플롯합니다. zdiroffset에 적절한 매개변수를 사용합니다.

kw = {
    'vmin': data.min(),
    'vmax': data.max(),
    'levels': np.linspace(data.min(), data.max(), 10),
}

## Create a figure with 3D ax
fig = plt.figure(figsize=(5, 4))
ax = fig.add_subplot(111, projection='3d')

## Plot contour surfaces
_ = ax.contourf(
    X[:, :, 0], Y[:, :, 0], data[:, :, 0],
    zdir='z', offset=0, **kw
)
_ = ax.contourf(
    X[0, :, :], data[0, :, :], Z[0, :, :],
    zdir='y', offset=0, **kw
)
C = ax.contourf(
    data[:, -1, :], Y[:, -1, :], Z[:, -1, :],
    zdir='x', offset=X.max(), **kw
)

플롯의 제한 설정

set 메서드를 사용하여 플롯의 제한을 설정하고 X, Y, Z 좌표의 제한을 전달합니다.

## Set limits of the plot from coord limits
xmin, xmax = X.min(), X.max()
ymin, ymax = Y.min(), Y.max()
zmin, zmax = Z.min(), Z.max()
ax.set(xlim=[xmin, xmax], ylim=[ymin, ymax], zlim=[zmin, zmax])

가장자리 플롯

plot 메서드를 사용하여 가장자리를 플롯합니다. X 및 Y 좌표를 따라 세 개의 선과 X 및 Z 좌표를 따라 한 개의 선을 플롯합니다.

## Plot edges
edges_kw = dict(color='0.4', linewidth=1, zorder=1e3)
ax.plot([xmax, xmax], [ymin, ymax], 0, **edges_kw)
ax.plot([xmin, xmax], [ymin, ymin], 0, **edges_kw)
ax.plot([xmax, xmax], [ymin, ymin], [zmin, zmax], **edges_kw)

레이블 및 Zticks 설정

set 메서드를 사용하여 레이블과 zticks 를 설정합니다. X, Y, Z 좌표에 대한 레이블을 설정하고, 상자의 깊이를 표시하도록 zticks 를 설정합니다.

## Set labels and zticks
ax.set(
    xlabel='X [km]',
    ylabel='Y [km]',
    zlabel='Z [m]',
    zticks=[0, -150, -300, -450],
)

줌 및 각도 뷰 설정

view_initset_box_aspect 메서드를 사용하여 줌 및 각도 뷰를 설정합니다. X 방향으로 40 도, Y 방향으로 -30 도의 각도 뷰를 설정하고 줌을 0.9 로 설정합니다.

## Set zoom and angle view
ax.view_init(40, -30, 0)
ax.set_box_aspect(None, zoom=0.9)

Colorbar 추가

colorbar 메서드를 사용하여 colorbar 를 추가합니다. colorbar 의 위치를 조정하기 위해 fractionpad 매개변수를 설정하고, 데이터의 이름과 단위를 표시하도록 레이블을 설정합니다.

## Colorbar
fig.colorbar(C, ax=ax, fraction=0.02, pad=0.1, label='Name [units]')

요약

이 랩에서는 Python 과 Matplotlib 을 사용하여 3D 박스 표면 플롯을 만들었습니다. 차원을 정의하고, 가짜 데이터를 생성하고, 등고선 표면을 플롯했습니다. 플롯의 제한을 설정하고, 가장자리를 플롯하고, 레이블과 zticks 를 설정하고, 줌 및 각도 뷰를 설정하고, colorbar 를 추가했습니다. 이 플롯은 3D 데이터를 시각화하고 변수 간의 관계를 탐색하는 데 사용할 수 있습니다.