風鈴の読み方とPythonで風鈴を描く方法
もしかしたら、風のバラ(Wind Rose Diagram)を見たことがありますか?ウィンドローズは、特定の地域における風の方向と速度を一目で把握できるように視覚化したグラフです。科学、環境研究、航空、海洋など様々な分野で広く使われています。

この記事では、風鈴の読み方を詳しく解説します、 Pythonを使って風鈴を描く方法を段階的に説明します。この記事を通して、風鈴を理解し、自分で作ってみる機会を持ってみてください!
風鈴とは?
風のバラ(Wind Rose Diagram)は 特定地域の風データを方位と風速で表したグラフです。方位(風向)は方位角(0°~360°)で表し、風速はグラフの中心から外側に進む距離で視覚化します。 また、風速ごとに色を変えて表現し、データを簡単に理解することができます。
ウィンドローズは以下の情報を提供します。
- 主な風向き: 特定の方向から風がどのくらいの頻度で吹いているかを知ることができます。
- 風速の強弱風の強弱を把握することができます。
- 様々な方位別の風分布: 特定の方位(例えば、北東、南西)の風の特徴を知ることができます。
Pythonで風鈴を描く
以下は、Pythonを使用して風向きと風速のデータを基に、方位別の風分布を可視化するコードです。 このコードは、風向と風速のデータを基に、方位別の風分布を可視化します。
import pandas as pd
matplotlib.pyplot を plt としてインポートします。
from matplotlib import font_manager, rc
math from math import radians
numpy を np としてインポート
# ハングルフォント設定
rc('font', family='HCR Dotum')
#のサンプルデータ生成 (実際のデータに置き換え可能)
directions = np.array([0, 45, 90, 135, 180, 225, 270, 315])
speeds = np.array([2.5, 1.5, 1.0, 2.0, 3.0, 2.0, 1.0, 1.5])
# データフレーム生成
df = pd.DataFrame({
'Direction': directions, #の風向きデータ
'Speed': speeds # 風速データ
})
def create_wind_rose(data):
#極座標サブプロット生成
fig = plt.figure(figsize=(8, 8))
sp = plt.subplot(projection="polar")
#方向データをラジアンに変換する
direction_rad = np.radians(data['Direction'])
# 散布図を作成
scatter = sp.scatter(direction_rad, data['Speed']、
s=100, # マーカーサイズ
c=data['Speed'], # 風速に応じた色の変化
cmap='YlOrRd', # カラーマップ設定
alpha=0.6) #の透明度設定
# グラフの基本設定
sp.set_theta_zero_location("N") #北を0度に設定する
sp.set_theta_direction(-1) # 時計回りに角度を増やす
# グリッド設定
sp.grid(True)
# 風速範囲を設定 (0-3.5 m/s)
sp.set_ylim(0, 3.5)
# 方位角ラベル設定
angles = np.range(0, 360, 45)
labels = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']].
sp.set_xticks(np.radians(angles))
sp.set_xticklabels(labels)
# タイトルとラベルの設定
plt.title('Wind Rose Diagram', pad=20)
# カラーバーを追加
cbar = plt.colorbar(scatter)
cbar.set_label('Wind Speed (m/s)')
return fig
# 風のバラチャートを生成
fig = create_wind_rose(df)
# グラフの保存及び出力
plt.savefig('wind_rose.jpg', dpi=300, bbox_inches='tight')
plt.show()
コード解説
- ライブラリの読み込みとデータ生成
numpyとパンダを使用して風向(方位)と風速データを生成します。
- データフレーム生成
方向性(風向き)とスピード(風速)を列として持つデータフレームを生成します。
- 極座標プロット生成
plt.subplot(projection="polar")を使用して、風車描画極座標システムを設定します。
- 方向データ変換
- 風向データを
ラジアン関数でラジアン単位に変換します。
- 風向データを
- 散布図作成
スキャッターを使用して風向と風速のデータを視覚化します。- 風速によってドットの色が変わるように
cmap='YlOrRd'を設定します。
- グラフ設定
- 北を基準に方位角0°を設定(
set_theta_zero_location("N")). - 角度を時計回りに増加するように設定(
set_theta_direction(-1)).
- 北を基準に方位角0°を設定(
- カラーバーを追加
- 風速範囲を示すカラーバーを追加して、色が意味する風の強さを確認することができます。
風花の読み方

- ベアリングの読み取り
- 風は
N(北),NE(北東),E(東)等8つの主要な軸受けから吹きます。 - 点が位置する角度が、風が吹く方向を表しています。
- 風は
- 風速読み取り
- 中心から離れるほど風が強くなります。
- 同心円は風速の単位を表し、最大値(3.5 m/s)まで表示されます。
- 色の解釈
- 明るい黄色は弱い風、赤い色は強い風を意味します。
整理する
この記事では、風紋の読み方と風紋の描き方について説明しました。Pythonを活用してデータを可視化するプロセスと、結果の解釈方法まで学ぶことができました。ウィンドローズを通じて、特定の地域の風データをよりよく理解し、必要な意思決定を支援するツールとして活用してみてください!
ちなみに、風鈴が新鮮な方は、おそらくステムプロットもそうではないかと思います。 数値型データをPythonで可視化する:ステムプロット(Stem Plot)の活用法 ポストレビューで新しいグラフの可視化方法を確認してみてください!
# コード詳細解説
import pandas as pd matplotlib.pyplot を plt としてインポートします。 from matplotlib import font_manager, rc math from math import radians numpy を np としてインポート
- ライブラリインポート
パンダ:データフレームの作成とデータ管理に使用されます。matplotlib.pyplot:データ可視化のためのライブラリです。font_managerとrc: ハングルフォントを設定するためのツールです。math.radians: 角度をラジアン値に変換するために使用されます。numpy: 配列演算とデータ生成に使用されます。# ハングルフォント設定 rc('font', family='HCR Dotum')
- ハングルフォント設定
- グラフでハングルを正しく表示するためにフォントを設定します。
HCR Dotumはハングル対応フォントです。- システムにインストールされている他のハングルフォントを使用することもできます。
# サンプルデータ生成(実データに置き換え可能) directions = np.array([0, 45, 90, 135, 180, 225, 270, 315]) speeds = np.array([2.5, 1.5, 1.0, 2.0, 3.0, 2.0, 1.0, 1.5])
- データ生成
道順風が吹く方向(風向)を8つの方位角(0°, 45°, ..., 315°)に設定します。速度各方向からの風速をm/s単位で表します。# データフレームの生成 df = pd.DataFrame({ 'Direction': directions, #の風向データ 'Speed': speeds # 風速データ })
- データフレーム生成
方向性: 方位角データを保存します。スピード: 各方位角に対応する風速データを保存します。- このデータは、風車グラフを描くために使用されます。
def create_wind_rose(data): #極座標サブプロットを作成します。 fig = plt.figure(figsize=(8, 8)) sp = plt.subplot(projection="polar")
- 関数定義と極座標プロット生成
create_wind_rose(data): 入力データフレームを受け取り、風鈴を生成する関数です。plt.figure(figsize=(8, 8))キャンバスサイズを8インチ×8インチに設定します。plt.subplot(projection="polar"): 極座標プロットを生成します。この座標系は方位角と半径を使用します。# 方向データをラジアンに変換します。 direction_rad = np.radians(data['Direction'])
- 方向データをラジアンに変換
np.radians: 角度データをラジアン値に変換します。- 極座標系は方位角をラジアン値で処理するため、変換が必要です。
# 散布図の生成 scatter = sp.scatter(direction_rad, data['Speed']、 s=100, # マーカーサイズ c=data['Speed'], # 風速に応じた色の変化 cmap='YlOrRd', # カラーマップ設定 alpha=0.6) # 透明度の設定
- 散布図作成
sp.scatter: 極座標系で各データポイントを散布図で表示します。
s=100を設定します:マーカーのサイズを設定します。c=data['Speed']風速値に基づいて色を設定します。cmap='YlOrRd'カラーマップを黄色・オレンジ・赤系に設定し、風が強いほど濃い色で表示します。alpha=0.6を設定します:マーカーの透明度を設定します。# グラフの基本設定 sp.set_theta_zero_location("N") # 北を0度に設定する sp.set_theta_direction(-1) # 時計回りに角度を増やす
- 極座標設定
set_theta_zero_location("N")北(N)を0°に設定します。set_theta_direction(-1): 方位角が時計回りに増加するように設定します。# グリッド設定 sp.grid(True)
- グリッド有効化
- 方位角と半径に応じてグリッド線を有効にし、データを読みやすくします。
# 風速範囲設定 (0-3.5 m/s) sp.set_ylim(0, 3.5)
- 風速範囲設定
- 半径の範囲を0〜3.5 m/sに制限します。
- この範囲内の各方向の風速が表示されます。
# 方位角ラベル設定 angles = np.range(0, 360, 45) labels = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']]. sp.set_xticks(np.radians(angles)) sp.set_xticklabels(labels)
- 方位角ラベル設定
角度方位角(0°, 45°, ..., 315°)を設定します。ラベル: 各方位角に対応する方位(N、NE、Eなど)を設定します。set_xticks: 方位角の位置をラジアン値で設定します。set_xticklabels: 各方位角の名前をラベルで表示します。# タイトルとラベルの設定 plt.title('Wind Rose Diagram', pad=20)
- グラフタイトル設定
plt.title: グラフタイトルを「Wind Rose Diagram」に設定します。pad=20: タイトルとグラフの間隔を設定します。# カラーバーを追加 cbar = plt.colorbar(scatter) cbar.set_label('Wind Speed (m/s)')
- カラーバーを追加
plt.colorbar(scatter)風速による色の変化を表すカラーバーを追加します。set_labelカラーバーのラベルを「Wind Speed (m/s)」に設定します。リターンイチジク
- グラフを返す
- 完成したグラフオブジェクト(
イチジク)を返します。# 風のバラチャートを作成 fig = create_wind_rose(df) # グラフの保存及び出力 plt.savefig('wind_rose.jpg', dpi=300, bbox_inches='tight') plt.show()
- グラフの作成と保存
create_wind_rose(df): 先ほど定義した関数を呼び出して風鈴を生成します。plt.savefig: 作成したグラフを「wind_rose.jpg」ファイルとして保存します。plt.show: グラフを画面に表示します。






