Pythonで3Dグラフ表示 matplotlib,Axes3D 〜基本編〜

Python
スポンサーリンク

データの準備

これまでmatplotlibでは2次元データを扱ってきました。

しかし時には3次元データを使うなんてこともあるでしょう。

今回は簡単にですが、3次元データのプロットの仕方を解説していきます。

まずは3次元データの準備をしましょう。

とりあえず、X軸5つ、Y軸5つでZ軸を0−9の値で適当に作ってみました。

分かりやすく書くと下のような2次元リストになっています。

1, 2, 3, 4, 5
9, 8, 7, 6, 5
4, 7, 3, 8, 2
1, 9, 4, 6, 3
3, 7, 2, 6, 5

横方向がX軸方向、縦方向がY軸方向、そして数値自体がZ軸方向なります。

これでデータの準備ができました。

それでは3Dプロットしていきましょう!

スポンサーリンク

インポート

今回、インポートするライブラリはいくつかあるので、順に見ていきましょう。

まずはnumpyです。

いつも通り、numpyをnpとして使えるようにインポートします。

次にmatplotlibです。

こちらもmatplotlibのpyplotをpltとして使えるようにインポートします。

最後に3Dプロット用のライブラリです。

mpl_toolkits.mplot3dからAxes3Dをインポートします。

さらにマジックコマンドを入れておきましょう。

これでjupyter notebook上で拡大縮小などできるようになります。

まとめるとこんな感じです。

スポンサーリンク

座標点用の格子列の作成

3Dプロットをするには、格子列というのが必要になります。

3Dプロットなので、X軸、Y軸の場所を決めて、Z軸方向に数値をプロットすることになります。

そこで先ほどのリストのそれぞれの要素が、X軸、Y軸のどこに当たるか決めてやる必要があるということです。

X軸の要素数はリストの中のさらにリストの中の要素数に当たります。

1, 2, 3, 4, 5 ←この要素数(この場合は5)
9, 8, 7, 6, 5
4, 7, 3, 8, 2
1, 9, 4, 6, 3
3, 7, 2, 6, 5

この要素数を取得するには、test_data内のリストのうち、一つのリストを取り、その要素数を取得します。

つまりこんな感じになります。

Y軸の要素数を取得するには、test_dataのリスト内の要素数を取得します。

この要素数を取得

1, 2, 3, 4, 5
9, 8, 7, 6, 5
4, 7, 3, 8, 2
1, 9, 4, 6, 3
3, 7, 2, 6, 5

こちらの方がシンプルで、こんな感じになります。

その要素数に対し、番号を振るため、np.arange関数を使って、リストを作ります。

それぞれ0から4まで番号を振ることができました。

これを格子列化します。

その場合、np.meshgrid(Xのリスト、Yのリスト)を使います。

これでそれぞれの座標点を作ることができました。

つまり座標点としては、こんな感じになるわけです。

0-0, 1-0, 2-0, 3-0, 4-0
0-1, 1-1, 2-1, 3-1, 4-1
0-2, 1-2, 2-2, 3-2, 4-2
0-3, 1-3, 2-3, 3-3, 4-3
0-4, 1-4, 2-4, 3-4, 4-4

次はとうとうプロットしていきますよ!

スポンサーリンク

3Dプロットの種類

3Dプロットの方法はいくつかあり、ここでは使いそうなものを紹介していきます。

まず基本的にプロットするには、次の2行が必要です。

1行目で図を作り、2行目で3次元グラフであることを指定します。

その後、プロット方法によって、少しずつコマンドが変わってきます。

まずは表面プロット(surface)です。

表面プロットの場合、plot_surface(X軸の格子列, Y軸の格子列, データ)となります。

また図は上の2行のコマンドで、axに渡されているため、ax.plot_surface(X軸の格子列, Y軸の格子列, データ)となります。

次は散布図モデル。

散布図モデルの場合は、ax.scatter(X軸の格子列, Y軸の格子列, データ)となります。

もう一つはワイヤーフレームです。

ワイヤーフレームの場合は、ax.plot_wireframe(X軸の格子列, Y軸の格子列, データ)になります。

今回はとりあえずプロットするところまでとします。

次回はこの3Dプロットにタイトルや軸の名前など見やすくしていきます。

Pythonで3Dグラフ表示 matplotlib,Axes3D 〜軸とカラーバーの表示〜
前回のおさらいコードまずは前回のおさらいコードから。今回は表面モデルを使っていきます。from matplotlib import pyplot as pltfrom mpl_toolkits.mplot...

コメント

タイトルとURLをコピーしました