2021-01-19に投稿

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

はじめに

 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

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

ツイッターでシェア
みんなに共有、忘れないようにメモ

kawai_mizugorou

修士課程2年.自分用のメモとして使ってます.

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント