Matplotlibでデータフレームから3Dサーフェスプロットを表示する方法
Matplotlibでサーフェスプロット(3Dプロット)を作成する場合、1次元のデータフレームでは描画できません。3D表面を表現するためには、2次元のデータポイント(X・Y・Zの組み合わせ)が必要になります。
この記事では、numpyで生成したデータを使って、Matplotlibで3Dサーフェスプロットを表示する基本的な手順を解説します。
3Dサーフェスプロットを描画する手順
- 図のサイズとレイアウトを設定する —
plt.rcParamsでフィギュアサイズを指定し、サブプロット間および周囲の余白(パディング)を自動調整します。 - フィギュアを作成する —
figure()メソッドを使って新しい図を作成、または既存の図をアクティブにします。 - 3D軸を追加する —
add_subplot()メソッドにprojection='3d'を指定して、サブプロットとしてAxes(座標軸)を追加します。 - サンプル数を定義する — 変数
nでデータポイントの数を初期化します。 - x・y・zのデータを作成する — numpyを使って各軸のデータポイントを生成します。zは2次元配列(グリッドデータ)である必要があります。
- サーフェスを描画する —
plot_surface()メソッドで3Dサーフェスを作成します。cmap引数でカラーマップを指定できます。 - 図を表示する —
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次元配列で用意します。これがサーフェスの高さ情報になります。rstrideとcstrideは行・列方向の描画ステップを制御し、値を小さくするとより滑らかな表面になります。cmap='copper'はカラーマップの指定です。他にも'viridis'や'plasma'などが利用できます。ax.axis('off')で軸ラベルや目盛りを非表示にしています。必要に応じて削除してください。
出力結果

このように、2次元のデータポイントを用意すれば、Matplotlibのplot_surface()メソッドだけで簡単に立体的なサーフェスプロットを描画できます。実際のデータ分析でも、Pandasのデータフレームからpivot_tableなどで2次元化したデータを渡すことで、同様に3D可視化が可能です。
-
Matplotlibで3D連続線をプロットする方法
Matplotlibを使って3次元空間に連続的な線(3Dライン)を描画する方法を解説します。基本的な手順は以下の通りです。3Dプロットの手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x と y のデータポイントを作成します。xとyのデータポイントから z のデータポイントを計算して作成します。figure() メソッドを使って、新しい図を作成するか既存の図をアクティブにします。add_subplot() メソッドに3D投影(projection=3d)を指定して、Axesを追加します。plot() メソッドを使って、x、y、zのデータポ
-
Matplotlibのプロットからデータを抽出する方法|get_xdata・get_ydataの使い方
Matplotlibで作成したプロットから元のデータを取り出したい場合、get_xdata() メソッドと get_ydata() メソッドを使うことで簡単に実現できます。これらのメソッドは、プロットされたLine2DオブジェクトからX軸・Y軸のデータポイントをそれぞれ取得します。実行手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。numpy を使って y のデータポイントを作成します。y のデータポイントを color=red(赤色)・linewidth=5(線幅5)でプロットします。データ抽出の開始を示すメッセージを出力します。get_xdata() と