【超簡単】matplotlibで3D plot をマウスでグリグリ回そう!(by Python)

Python入門
この記事は約5分で読めます。

手元のデータを3次元グラフにして、マウスでグリグリと色んな方向から見たい時ってありませんか?

C#とかVB.NETなどで同じことをする場合は結構ハードルが高く、有料のライブラリを購入するか、あるいは単体の3Dグラフ表示ツールにCSV経由でデータを流し込むくらいしか方法がありません。

しかし、Pythonのmatplotlib を使うと、これが簡単にできてしまいます。

今回は、その方法について解説したいと思います。

matplotlib による3Dグラフの表示

pythonでは、matplotlib と mpl_toolkits というライブラリを組み合わせることで、下記のような3Dグラフを簡単に描くことが出来ます。 

matplotについて詳細が知りたい方は、こちらの記事をご覧ください。

一番簡単な3Dグラフの描き方

まず最初に、matplotlib からは plt を、mpl_toolkits からは Axes3D をインポートする必要があるので、次の2行を記述しておきます。

実際に3Dグラフを描くための手順は次のようになります。

add_subplot メソッドの引数で projection=’3d’ を指定するところがポイントです。

下記フローは散布図の例ですが、scatter メソッド以外にも局面を描画する plot_surface メソッドや、ワイヤーフレームを描画する plot_wireframe などが用意されています。

一番簡単な3Dプロットのサンプルは次の様になります。

ちなみに、3Dプロットを計算するために numpy を使っています。

上記プログラムを実行すると、下記の3Dプロットが表示されます。

3Dグラフに日本語タイトルを表示する

日本語タイトルを表示するには、matplotlib が対応している日本語フォントを指定する必要があります。

下記の1行を記述することで、matplotlibの初期フォントを変更することが出来ます。

今回は、’Meiryo’を指定しました。

グラフ全体のタイトルは set_title メソッド、X,Y,Z軸のタイトルはそれぞれ set_xlabel、set_ylabel、set_zlabelを使いますが、この辺の設定は2Dグラフと同様です。

これらを含めて散布図の3Dグラフを描き直すと次の様になります。

実行した結果、次のグラフが表示されます。

ドットで3Dグラフを描く(scatter)

これは散布図を描く方法と同じで scatter メソッドに渡す値を変えただけです。

プログラムは次の通りです。

ワイヤーフレームで3Dグラフを描く(plot_wireframe)

ワイヤーフレームでグラフを描くには plot_wireframe メソッドを使います。

先ほどの「 ドットで3Dグラフを描く 」の scatter の行を次の様に書き換える事でワイヤーフレームでの描画が可能です。

曲面で3Dブラフを描く(plot_surface)

曲面でグラフを描く場合は、 plot_surface メソッドを使います。

「 ドットで3Dグラフを描く 」の scatter の行を次の様に書き換える事で、曲面を使った滑らかな描画が可能です。

底面に等高線を描く(contour)

グラフの底面に等高線を引くことも可能で、 contour メソッドを使います。

「 ドットで3Dグラフを描く 」の scatter の行を次の様に書き換える事で、底面に等高線を引くことが出来ます。

ドットと局面と等高線を組み合わせる

曲面の頂点にドットを描いて、且つ等高線を引いてみます。

グラフは順番に描画されますので、曲面を描いてから散布図を描くようにします。

もし逆にすると曲面で散布図がかき消されてしまいます。

「 ドットで3Dグラフを描く 」の scatter の行を次の様に書き換える事で、曲面とドットと等高線を同時に描くことが出来ます。

3D空間に線を描く(plot)

3Dグラフにもplot メソッドが用意されており、x,y,z の値を使って3次元空間に線を引くことが出来ます。

これ個までに紹介したグラフのデータをplot に渡しても線が引けないので、データ作成部分も変更しています。

下記を丸ごとコピーして実行すると、上記のグラフが表示できます。

まとめ

今回は matplotlib を使って3Dグラフを描画する方法を解説しました。

python のグラフ描画機能は非常に強力で、マウスでグリグリ回せる3Dグラフを簡単に作成することが出来ます。

ドットでの描画、曲面での描画、ワイヤーフレーム、折れ線、等高線を引くことが可能で、それらを同時に重ね合わせることも出来ます。

もし3Dグラフでグリグリしたくなったら、是非この記事を活用して下さい。

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