Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで等高線の投影付き3Dサーフェスプロット(plot_surface)を描画する方法

Matplotlibで3Dのplot_surface()によるサーフェスプロットに等高線プロットの投影を組み合わせて描画するには、plot_surface()メソッドとcontourf()メソッドを使用します。

手順

  • 図のサイズを設定し、サブプロット間およびその周囲のパディング(余白)を調整します。

  • numpyを使用して x、y、X、Y、Z のデータポイントを作成します。

  • figure() メソッドで新しい図を作成するか、既存の図をアクティブにします。

  • サブプロット構成の一部として、3D投影を指定した ~.axes.Axes を図に追加します。

  • plot_surface() メソッドを使用してサーフェスプロットを作成します。

  • contourf() メソッドを使用して、塗りつぶし等高線プロットを作成します。

  • 軸を非表示にします。

  • 図を表示するには、show() メソッドを使用します。

サンプルコード

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(x, y)
Z = X * np.exp(-X - Y)

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=1, cmap="copper")
ax.contourf(X, Y, Z, zdir='z', offset=np.min(Z), cmap="plasma")
ax.contourf(X, Y, Z, zdir='x', offset=-5, cmap="PiYG_r")
ax.contourf(X, Y, Z, zdir='y', offset=5, cmap="PuBuGn")

ax.axis('off')
plt.show()

出力結果

Matplotlibで等高線の投影付き3Dサーフェスプロット(plot_surface)を描画する方法

解説のポイント

このコードでは、np.meshgrid()で生成したグリッドデータに対して Z = X * np.exp(-X - Y) という関数を適用し、3D空間上の曲面を作成しています。plot_surface() の引数 rstridecstride は行・列方向の描画間隔を指定し、値を大きくすると曲面が粗く描かれます。

contourf()zdir 引数で等高線を投影する平面の方向('z'、'x'、'y')を指定し、offset 引数でその平面の位置を決定します。これにより、Z軸方向の底面だけでなく、X・Y軸側面にも等高線を投影でき、3Dデータの分布を多角的に把握できます。各投影面ごとに異なるカラーマップ(cmap)を指定することで、視認性がさらに向上します。

  1. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp

  2. Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説

    MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元