matplotlib
前回、NumPyで配列の形状を変えるブロードキャスト(np.broadcast_to、np.broadcast_arrays)を紹介しました。

今回はmatplotlibで風データ(風向、風速)をプロットするbarbsを紹介します。
それでは始めていきましょう。
matplotlib.barbsの基本
まず風データをプロットするmatplotlib.barbsを使用するには、グラフ上のXの位置のリスト、Yの位置のリスト、東西方向の風速のリスト、南北方向の風速のリストが必要になります。
そして「plt.barbs(Xの位置のリスト, Yの位置のリスト, 東西方向の風速のリスト, 南北方向の風速のリスト)」とします。
まずは風速が分かりやすい様に南北方向の風速は「0」として表示してみます。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 21, 1)
y_list = np.arange(0, 21, 1)
ew_list = np.arange(0, 101, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list)
plt.show()
実行結果

東西方向、南北方向を示すのにそれぞれ一つのリストで用いるということは、東西、南北をそれぞれ±の値で東西(それぞれマイナス、プラス)、南北(それぞれプラス、マイナス)で示します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(-50, 51, 10)
ns_list = np.arange(-50, 51, 10)
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list)
plt.show()
実行結果

風速の羽、旗の定義の変更
風速の羽はデフォルトでは5で半分の長さ、10で全長、50で旗となっています。
そのため細かい違いは表示できず、実際には値が違うのにも関わらず、同じ表記になってしまうことがあります。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 11, 1)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list)
plt.show()
実行結果

この風力の定義を変更するには「barb_increments=dict(half=半分の長さの際の風力, full=全長の長さの際の風力, 旗の風力)」とします。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 11, 1)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, barb_increments=dict(half=2.5, full=5, flag=10))
plt.show()
実行結果

色の変更
色を変更するにはカラーマップを使う方法と自分でそれぞれのプロットの色を指定する方法があります。
まずカラーマップを使う方法はplt.barbsにさらにカラーマップの色を指定するための数値データのリストを準備します。
今回はXの値のリストで代用します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, x_list)
plt.show()
実行結果

カラーマップを指定しない場合は「viridis」が使われます。
また「cmap=カラーマップ」を引数に追加すると、指定したカラーマップを使用できます。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, x_list, cmap="rainbow")
plt.show()
実行結果

次にそれぞれのプロットに色を指定する場合、各プロットに対する色のリストを作成します。
そして引数に「barbcolor=色のリスト」、もしくは「flagcolor=色のリスト」を追加します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
colors = ["tab:blue", "tab:green", "tab:purple", "tab:pink", "tab:olive",
"tab:orange","tab:red", "tab:brown", "tab:gray", "tab:cyan"]
plt.barbs(x_list, y_list, ew_list, ns_list, barbcolor=colors)
plt.show()
実行結果

import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
colors = ["tab:blue", "tab:green", "tab:purple", "tab:pink", "tab:olive",
"tab:orange","tab:red", "tab:brown", "tab:gray", "tab:cyan"]
plt.barbs(x_list, y_list, ew_list, ns_list, flagcolor=colors)
plt.show()
実行結果

ちなみに「barbcolor」と「flagcolor」の違いはよく分かりませんでした。
ついでに風速0の時の円を塗りつぶすには「fill_empty=True」を引数に追加します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, fill_empty=True)
plt.show()
実行結果

プロットサイズの変更
プロットサイズの変更には「length」を指定する方法と「sizes」を指定する方法があります。
まずlengthを指定する方法は単純に「length=値」を引数に追加します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, length=15)
plt.show()
実行結果

次に「sizes」を指定する方法ですが、この場合はさらに「spacing」、「height」、「width」を別々に指定することができます。
「spacing」は羽や旗の間隔の調整です。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, sizes=dict(spacing=0.3))
plt.show()
実行結果

「height」は羽や旗の長さを変更します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, sizes=dict(height=1))
plt.show()
実行結果

「width」は羽や旗の幅を指定します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, sizes=dict(width=1))
plt.show()
実行結果

最後についでに風力0の時の円のサイズを変えるには「emptybarb=値」を「sizes」に追加します。
import matplotlib.pyplot as plt
import numpy as np
x_list = np.arange(0, 11, 1)
y_list = np.arange(0, 11, 1)
ew_list = np.arange(0, 51, 5)
ns_list = np.zeros(len(x_list))
fig = plt.figure()
plt.clf()
plt.barbs(x_list, y_list, ew_list, ns_list, sizes=dict(emptybarb=1))
plt.show()
実行結果

次回はmatplotlibでベクトル場を表示するquiverを紹介します。
ではでは今回はこんな感じで。
コメント