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

Matplotlibでデータフレームから3Dサーフェスプロットを表示する方法

Matplotlibでサーフェスプロット(3Dプロット)を作成する場合、1次元のデータフレームでは描画できません。3D表面を表現するためには、2次元のデータポイント(X・Y・Zの組み合わせ)が必要になります。

この記事では、numpyで生成したデータを使って、Matplotlibで3Dサーフェスプロットを表示する基本的な手順を解説します。

3Dサーフェスプロットを描画する手順

  1. 図のサイズとレイアウトを設定するplt.rcParamsでフィギュアサイズを指定し、サブプロット間および周囲の余白(パディング)を自動調整します。
  2. フィギュアを作成するfigure()メソッドを使って新しい図を作成、または既存の図をアクティブにします。
  3. 3D軸を追加するadd_subplot()メソッドにprojection='3d'を指定して、サブプロットとしてAxes(座標軸)を追加します。
  4. サンプル数を定義する — 変数nでデータポイントの数を初期化します。
  5. x・y・zのデータを作成する — numpyを使って各軸のデータポイントを生成します。zは2次元配列(グリッドデータ)である必要があります。
  6. サーフェスを描画するplot_surface()メソッドで3Dサーフェスを作成します。cmap引数でカラーマップを指定できます。
  7. 図を表示するshow()メソッドでグラフを画面に表示します。

サンプルコード

import numpy as np
from matplotlib import pyplot as plt

# フィギュアサイズとレイアウトの設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# フィギュアと3D軸の作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# サンプル数
n = 50
x = np.random.rand(n)
y = np.tan(x)
z = np.random.rand(n, n)  # zは2次元配列

# 3Dサーフェスの描画
surf = ax.plot_surface(y, x, z, rstride=1, cstride=1,
                       cmap='copper', linewidth=0, antialiased=False)
ax.axis('off')
plt.show()

コードのポイント

  • z = np.random.rand(n, n)のように、z軸のデータは(n, n)の2次元配列で用意します。これがサーフェスの高さ情報になります。
  • rstridecstrideは行・列方向の描画ステップを制御し、値を小さくするとより滑らかな表面になります。
  • cmap='copper'はカラーマップの指定です。他にも'viridis''plasma'などが利用できます。
  • ax.axis('off')で軸ラベルや目盛りを非表示にしています。必要に応じて削除してください。

出力結果

Matplotlibでデータフレームから3Dサーフェスプロットを表示する方法

このように、2次元のデータポイントを用意すれば、Matplotlibのplot_surface()メソッドだけで簡単に立体的なサーフェスプロットを描画できます。実際のデータ分析でも、Pandasのデータフレームからpivot_tableなどで2次元化したデータを渡すことで、同様に3D可視化が可能です。

  1. Matplotlibで3D連続線をプロットする方法

    Matplotlibを使って3次元空間に連続的な線(3Dライン)を描画する方法を解説します。基本的な手順は以下の通りです。3Dプロットの手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x と y のデータポイントを作成します。xとyのデータポイントから z のデータポイントを計算して作成します。figure() メソッドを使って、新しい図を作成するか既存の図をアクティブにします。add_subplot() メソッドに3D投影(projection=3d)を指定して、Axesを追加します。plot() メソッドを使って、x、y、zのデータポ

  2. Matplotlibのプロットからデータを抽出する方法|get_xdata・get_ydataの使い方

    Matplotlibで作成したプロットから元のデータを取り出したい場合、get_xdata() メソッドと get_ydata() メソッドを使うことで簡単に実現できます。これらのメソッドは、プロットされたLine2DオブジェクトからX軸・Y軸のデータポイントをそれぞれ取得します。実行手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。numpy を使って y のデータポイントを作成します。y のデータポイントを color=red(赤色)・linewidth=5(線幅5)でプロットします。データ抽出の開始を示すメッセージを出力します。get_xdata() と