【コピペで使える】3D plot を簡単に描くクラスを作ってみました。(by Python)

当ページのリンクには広告が含まれています。

前回の記事でmatplotlib による3Dグラフの描き方を紹介しました。

今回は、もっと簡単に3Dグラフが描けるようクラス化してみました。

データを与えるだけでグリグリ回る3Dグラフが出来上がります。

ついで、3Dグラフを描画するためのデモデータのサンプルもクラス化してみました。

興味のある方は是非、ご一読下さい。

目次

最初の準備

今回紹介するクラスを使うには matplotlib.pyplot と mpl_toolkits.mplot3d をインポートする必要があるので、下記2行を冒頭に追記して下さい。

Anaconda 経由で Python をインストールしていると既に含まれていますが、python 本家のサイトから Pythonをインストールしている場合、pip コマンドによるインストールが必要となります。

Plot3Dクラスの使い方

クラス名は Plot3D という名前にしました。

使い方は次の通りです。

ちなみに、「XYZラベルの設定」は省略可能で、省略した場合は”X”、”Y”、”Z” が軸のラベル名として設定されます。

このクラスを使って3D空間に散布図と折れ線を引くには、次の様になります。

下記が表示されるグラフです。

Plot3Dのリファレンス

ソースコードのコメントを使ってリファレンスを作ってみました。

機能メソッドとパラメータ
コンストラクタ __init__(self,title,size=15,color=”black”)

title:str       グラフタイトル
size:int        グラフタイトルのフォントサイズ
color:str      グラフタイトルの色
軸ラベルのサイズと色を設定set_label(self,xlabel,ylabel,zlabel,size=12,color=”black”) 

xlabel:int     X軸のラベル
ylabel:int     Y軸のラベル
zlabel:int     Z軸のラベル
size : int       ラベルのフォントサイゼ宇
color:str      ラベルの色
描画データの登録set_data(self,x,y,z,values = None)

x:int        Xの値
y:int      Yの値
z:int       Zの値
value:int   XYZ座標のデータが持つ値(初期値はNone)
線の描画plot(self,width=1,color=”black”)

size:int     線の太さ
color:str    線の色
散布図の描画scatter(self,size=1,color=”black”)

size :int     マーカーサイズ
color : str    マーカー色
カラーバー付き散布図の描画cmap_scatter(self,size=1,cmap=”hsv”)

size :int      マーカーサイズ
cmap : str    カラーマップ名
曲面の描画surface(self,cmap=”hsv”,alpha=0.8)

cmap : str    カラーマップ名
alpha:float    面の透明度
ワイヤーフレームの描画wireframe(self,color=”blue”)

color : str    ワイヤーの色
底面の等高線描画contour(self,color=”black”,offset=None)

color : str            等高線の色
offset : int,double    等高線のZ位置(0からのオフセット)
グラフの描画show()

ソースコード

クラスのソースコードは以下の通りです。

基本的な内容をクラス化していますので、必要に応じて修正、追記の上、お使いください。

3Dグラフ用サンプルデータ自動生成クラス

3Dグラフでググってみると、三角関数を使った綺麗なグラフの表示例が見つかります。

せっかく3Dグラフを簡単に描けるクラスを作ったので、このクラスを使って綺麗なグラフを描こうと思い、数式をPythonでソースコード化したものを探し回ってみました。

しかし、あちこちのサイトに少しづつ点在している状態だったので、見つけた内容をほぼそのままメソッド化し、データ自動生成クラスを作成してみました。

私自身あまり数学に得意ではないので、中身は良く分かっていませんが、とりあえずインスタンスを生成してメソッド( sample1~sample6 )を呼べば、それらしいデータが生成されます。

使い方

Create3DData というクラス名で作成しています。

クラス内では numpy を使っているので、あらかじめインポートしておいてください。

使い方は、インスタンスを生成し、sample1 ~ sample6 のいずれかのメソッドを呼ぶだけです。

戻り値として x,y,z が返って来ますので、Plot3D の set_data メソッドにセットします。

ソースコード

ソースコードは以下の通りです。

コメントは記述していませんが、コンストラクタにデータ個数を指定することができます。

データ個数が多いと3Dグラフの表示が重くなるので、初期値は50にしています。

3Dグラフのサンプル

6つのサンプルを順番に表示するサンプルプログラムを作りましたので、紹介しておきます。

上記のプログラムを実行すると、次のグラフが次々に表示されます。

カラーバーを使いたくない場合は scatter メソッドの方を使ってください。

以下は plt3d.wireframe メソッドを使った場合のワイヤーフレーム描画です。

以下は plt3d. surface メソッドを使った場合の曲面描画です。

以下は plt3d. surface と plt3d.scatter メソッドを使った場合の描画です。

まとめ

今回は 3Dグラフを簡単に描くためのクラス(Plot3D)と、3Dグラフのデータを自動生成するクラス(Create3DData)について紹介しました。

plot3DについてはX,Y,Zのデータを渡すだけで、簡単に3Dグラフを表示することが可能です。

必要最小限の機能しか実装していませんので、必要に応じてカスタマイズしてお使い下さい。

今回の記事が皆様のお役に立てれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次