1
0

More than 3 years have passed since last update.

極座標で等高線図を作成(Contour maps in polar coordinate)

Last updated at Posted at 2021-01-07

はじめに

 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()

image.png

以上になります.お疲れさまでした.
誤りの指摘や質問等がありましたら,お手数ですがコメントください.
よろしくお願いします.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0