3D ボックス曲面プロット

PythonPythonBeginner
今すぐ練習

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

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

はじめに

この実験では、Python と Matplotlib を使って 3D ボックス曲面プロットを作成する方法を学びます。次元を定義し、疑似データを作成し、等高線曲面をプロットします。プロットの範囲を設定し、エッジをプロットし、ラベルと z 目盛りを設定し、ズームと角度ビューを設定し、カラーバーを追加します。

VM のヒント

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

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

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

寸法を定義する

各辺の長さに対して 3 つの変数 Nx、Ny、Nz を作成することで、ボックスの寸法を定義します。次に、numpy の arange メソッドを使って X、Y、Z の 3 つのメッシュグリッドを作成します。最後に、平面ではなくボックスを作成するために、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 座標に沿って 3 本の線を、X と Z 座標に沿って 1 本の線をプロットします。

## 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)

ラベルと Z 目盛りを設定する

set メソッドを使ってラベルと Z 目盛りを設定します。X、Y、Z 座標のラベルを設定し、ボックスの深さを示すように Z 目盛りを設定します。

## 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 メソッドを使ってカラーバーを追加します。カラーバーの位置を調整するために fraction と pad パラメータを設定し、データの名前と単位を表示するためにラベルを設定します。

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

まとめ

この実験では、Python と Matplotlib を使って 3D のボックス曲面プロットを作成しました。寸法を定義し、疑似データを作成し、等高面をプロットしました。プロットの範囲を設定し、辺をプロットし、ラベルと Z 目盛りを設定し、ズームと角度視点を設定し、カラーバーを追加しました。このプロットは、3D データを可視化し、変数間の関係を調べるために使用できます。