Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【python】グラフを3Dで表示してみよう!

3Dグラフ

こんにちわ。ゆきぽんずです。

 

今日は以前取得したAndroidの加速度値をpythonを使って3Dプロットしていこうと思います!

 

ちなみに今回使用している実データは、以前の記事で取得したAndroidの加速度(CSVファイル)となっています。

 

以前の記事がこちらです。まだ見てない人は見てね( ´∀`)bグッ!

 

www.yukiyukiponsu.work

 

記事の目的 pythonを使った3Dグラフの作り方を学ぶ

 

記事の読者 3Dグラフの作り方を学びたい方

 

それでは早速コードを見ていきましょう!

ファイル名 : 3DPlotAccelerationGraphBlog.py

#外部ライブラリ使用
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D #3次元のグラフ
import matplotlib.dates as mdates
import numpy as np
import datetime
from scipy import signal

print('AccelerationData CSVFileName')
fileName = input('>>')
csv_input = pd.read_csv(filepath_or_buffer= fileName, encoding="utf8", sep=",")

x_array_Android = csv_input.iloc[:,0] #Android x軸加速度
y_array_Android = csv_input.iloc[:,1] #Android y軸加速度
z_array_Android = csv_input.iloc[:,2] #Android z軸加速度

print("Androidのサンプル数")
array_length_android = len(x_array_Android)
print(array_length_android)
print("Android y軸の最大値・最小値")
print(y_array_Android.max())
print(y_array_Android.min())

#グラフの作成
fig = plt.figure()
asset_android_acceleration = fig.add_subplot(111, projection='3d')

def GraphPlot3D(asset, label1, X, Y, Z):
    array_length = len(X)
    asset.plot(X, Y, Z, c='b', marker='o', label=label1)
    asset.legend()
    asset.set_xlabel('X')
    asset.set_ylabel('Y')
    asset.set_zlabel('Z')

    ### スケールの均一化 ##############################################################
    max_range = np.array([X.max()-X.min(), Y.max()-Y.min(), Z.max()-Z.min()]).max() * 0.5

    mid_x = (X.max()+X.min()) * 0.5
    mid_y = (Y.max()+Y.min()) * 0.5
    mid_z = (Z.max()+Z.min()) * 0.5
    asset.set_xlim(mid_x - max_range, mid_x + max_range)
    asset.set_ylim(mid_y - max_range, mid_y + max_range)
    asset.set_zlim(mid_z - max_range, mid_z + max_range)
    #################################################################################
GraphPlot3D(asset_android_acceleration, "Android_Acceleration[m/s2]", x_array_Android, y_array_Android, z_array_Android)

plt.show()

 

終わりです(笑)。短い行数で表現できるのがpythonの強みですが、3Dプロットをこの短さで実現できるのは本当にすごいです...

 

実行結果も載せておきます(できてもいないプログラムをサイトにあげるなんて言語道断なので)。

f:id:yukiyukiponsu:20200125001610p:plain

f:id:yukiyukiponsu:20200125001555p:plain

ちなみに3Dのグラフなので、動かしたりもできますよ!

 

以前の記事を参考にしてもらいながら、是非ご自分で実装してみてください!

 

今日は以上です。

 

今日もブログを読んでくださりありがとうございます。

 

それではまた後日( ´∀`)bグッ!