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

Python・NumPy・Matplotlibでマスク付きサーフェスプロット(3D曲面図)を作成する方法

Python・NumPy・Matplotlibを組み合わせることで、特定の条件に合致するデータ領域を非表示にした「マスク付きサーフェスプロット」を簡単に作成できます。マスク処理には numpy.ma.masked_where 関数を使用し、条件を満たす部分を描画から除外します。

以下の手順に従って実装していきましょう。

実装手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • 新しい図(figure)を作成するか、既存の図をアクティブにします。
  • サブプロット構成の一部として、図に3D用の軸(ax)を追加します。
  • 座標ベクトル pi と theta から meshgrid を使って座標行列を生成します。
  • masked_where で条件に基づいてマスクされたデータ点を持つ x、y、z を作成します。
  • x、y、z のデータをもとにサーフェスプロットを描画します。
  • 図を表示するには show() メソッドを使用します。

サンプルコード

import matplotlib.pyplot as plt
import numpy as np

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

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
pi, theta = np.meshgrid(
   np.arange(1, 10, 2) * np.pi / 4,
   np.arange(1, 10, 2) * np.pi / 4)

x = np.cos(pi) * np.sin(theta)
y = np.sin(pi) * np.sin(theta)
z = np.ma.masked_where(x >= 0.01, y)

ax.plot_surface(x, y, z, color='red')

plt.show()

コードのポイント解説

  • figure.figsize / figure.autolayout: 図のサイズを7×3.5インチに設定し、レイアウトを自動調整してラベルなどが切れないようにしています。
  • projection="3d": add_subplot にこの引数を指定することで、3次元プロット用の軸が作成されます。
  • np.meshgrid: pi と theta の各組み合わせに対する格子状の座標行列を生成し、球面状のデータ計算に利用しています。
  • np.ma.masked_where(x >= 0.01, y): x の値が 0.01 以上となる位置の y の値をマスク(無効化)します。これにより、該当領域はサーフェスプロット上に描画されなくなります。
  • plot_surface: x、y、z のデータから赤色の3D曲面を描画します。マスクされた部分は自動的に欠落として扱われます。

出力結果

上記のコードを実行すると、x ≥ 0.01 の領域がマスクされて穴が開いたような3Dサーフェスプロットが表示されます。マスク処理によって、不要な領域や無効なデータを視覚的に除外できるため、データの可視化において非常に便利な手法です。

  1. Python Matplotlibで3Dグラフをプロットする方法を解説

    PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使

  2. Python(Matplotlib)で散布図を作成し、データ点ごとに色を設定する方法

    Pythonの可視化ライブラリ「Matplotlib」では、scatter()メソッドを使うことで簡単に散布図を作成できます。さらに、c引数に値のリストを渡すことで、データ点ごとに異なる色(カラーマッピング)を割り当てることも可能です。 手順 np.random.rand()メソッドを使用して、指定した形状のランダムな値(x座標・y座標)を生成します。 scatter()メソッドを使い、x軸とy軸の値から散布図を作成します。このとき、c引数に0〜999までの連続した数値を指定することで、各データ点に異なる色が自動的に割り当てられます。色はデフォルトのカラーマップ(viridis)に基づいてグ