はじめに
この記事では、matplotlib の mplot3d モジュールを使用して3つのデータの関係性を3Dサーフェスプロット(surface plot)で可視化する方法について解説します。3次元データの視覚化は複雑なデータパターンや傾向を理解するのに役立ちます。また、データに欠損値がある場合の対処法についても説明していきます。
コード

解説
モジュールのインポート
データの生成
データとしてx, yがあり、各座標(x, y)に対応するデータZがあると仮定します。データZの形状はx × yとなります。3D surface plotを表示するためには、x, yの形状をZと合わせる必要があるため、np.meshgridを使用してすべてのデータの形状を揃えます。
3D surface plotの表示
ax.plot_surface(X, Y, Z)を使用してサーフェスプロットを表示できます。
データポイントを視覚化するには、ax.plot(X.ravel(), Y.ravel(), Z.ravel(), ‘ro’)と記述することで赤い点として表示できます。また、軸ラベルはax.set(xlabel=’x’, ylabel=’y’, zlabel=’z’)で設定できます。
個別に設定する方法(ax.set_xlabel()など)もありますが、ax.set()を使うとラベルをまとめて効率的に設定できます。とするとまとめて設定できる。
データに欠損値がある場合
欠損したデータの生成
A, B, Cをそれぞれ X, Y, Zと同様に生成し、ランダムに選んだ10個のインデックスを np.nan に設定します。その後、A=A[~np.isnan(A)]のように記述することで、nan値を除外した配列を取得できます。
3D surface plotの表示
plot_trisurfを使用することで3D surface plotを表示できます。plot_trisurfの特徴は、plot_surfaceとは異なり、1次元化されたデータでもsurface plotを生成できる点にあります。

回転アニメーション
作製した図を回転させると以下のようになります。
回転アニメーションは以下の記事を参考にして作成しました。

コメント