はじめに
Pythonで極座標形式の等高線図を描く方法を紹介します.matplotlibの公式ドキュメントを参考にしたので,詳しくはそちらをご覧ください.
本記事では,描き方の使用例として海の波の様子を表示させます.従って,変数は波の高さ・周波数・波向きの3つです.極座標形式の等高線図の周方向が波向きを,中心からの距離が周波数を,等高線の色が波高さを示します.
本編
準備
まずはモジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
続いては表示させたいデータをインポート.
本記事では,あらかじめ用意したcsvファイルを読み込みました.ファイルは25行36列のデータです.行は周波数を表し,列は波向きです.
a = pd.read_csv("GA.csv",engine='python',header=None,skiprows=0)
GA =a.values
極座標等高線図の作成
まずは,周方向と中心からの距離の軸を設定します.
ここで注意したいのが,インポートしたデータの波向きは,0°~350°([0,10,20, ,,, ,340,350])の36列です.しかし,極座標表示させたい場合は,0°~360°([0,10,20, ,,, ,350,360])の37列にする必要があります.
#周方向(波向き[rad])のリスト作成
theta = 2 * np.pi/360*np.arange(0, 370, 10)
#中心からの距離(波周波数[rad/s])のリスト作成
freq=2*np.pi*np.array([0.0445953, 0.0486315, 0.053033, 0.0578329, 0.0630672, 0.0687753, 0.075, 0.0817881, 0.0891906, 0.097263, 0.106066, 0.1156658, 0.1261345, 0.1375506, 0.15, 0.1635762, 0.1783811, 0.194526, 0.2121321,0.2313317, 0.252269, 0.2751013, 0.3000001, 0.3271524, 0.3567623])
X, Y = np.meshgrid(theta, freq)
#25行37列の2次元リストを作成 ※360°は0°の値を読み込んでいる事に注意
wavedata=[[float(GA[i,int((j)%36)])for j in range(37)] for i in range(25)]
いよいよ描画.
表示させたい2次元データは最大値が4.8なので,np.linspace(0.00, 5.00, 501)のmaxを5にして,同じようにvmax=5としています.
cmapはカラーマップです.色を変えたい場合はmatplotlibの色サンプルをご覧ください.
v = np.linspace(0.00, 5.00, 501)
ctf=ax2.contour(X, Y, wavedata,levels=v,cmap=cm.jet,linewidths=0.5,vmax=5)
plt.colorbar(ctf, pad=0.1,orientation="vertical")#カラーバーを横にしたければorientation="horizontal"
ax2.set_theta_zero_location("S")#0°の方角.北はN,南はS,西はW,東はE
ax2.set_theta_direction(1)#時計回りの場合は-1,反時計周りの場合は1
ax2.set_rlabel_position(60)#距離の軸の位置.単位はdeg.
plt.show()
以上になります.お疲れさまでした.
誤りの指摘や質問等がありましたら,お手数ですがコメントください.
よろしくお願いします.