はじめに
はじめまして。Rに興味を持っている非プログラマです。
皆さんの投稿を読んでいつも勉強させていただいております。
radial plotを使って風向図を描く
先日、気象庁のページを見ていて過去の気象データをダウンロードできることを知ったので、plotrixパッケージのradial.plotを使って風配図(Wind rose)を描いてみました。
どの地点を使ってもよかったのですが、例として羽田空港の日最多風向データを元に作成しています。
Rのversionなど
>sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
locale:
[1] ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] plotrix_3.5-10
loaded via a namespace (and not attached):
[1] digest_0.6.4 htmltools_0.2.6 rmarkdown_0.3.10 tools_3.1.2
[5] yaml_2.1.13
Radial.plot
plotrixパッケージ内のradial.plotを使ってレーダーチャートを書いていきます。
library(plotrix)
wind <- read.csv("~/RJTTwind.csv",header=TRUE)
head(wind)
tail(wind)
年月日 風向
1 2000/1/1 北北西
2 2000/1/2 北東
3 2000/1/3 北
4 2000/1/4 北北西
5 2000/1/5 北北東
6 2000/1/6 北北西
....略...
5474 2014/12/26 北北西
5475 2014/12/27 北北西
5476 2014/12/28 西北西
5477 2014/12/29 北北西
5478 2014/12/30 東北東
5479 2014/12/31 西南西
データは2000年1月1日から2014年12月31日までの日最多風向を利用しています。
元のデータは観測値の名前などの付帯情報がついてくるのですが、その辺は邪魔になるのであらかじめ削除してあります。さらに、Shift-jisが文字化けするのでエンコードの変換も済ませておきました。
wind_label <- c("北","北北東","北東","東北東","東","東南東","南東","南南東","南","南南西","南西","西南西","西","西北西","北西","北北西")
table(factor(wind$風向,levels=wind_label))
16方位それぞれの回数をtableでカウントして、その要素をfactorで
北から順番に並べています。カウントした結果は以下のようになります。
方位 | 日数 | 方位 | 日数 |
---|---|---|---|
北 | 702 | 南 | 938 |
北北東 | 718 | 南南西 | 477 |
北東 | 355 | 南西 | 126 |
東北東 | 335 | 西南西 | 53 |
東 | 229 | 西 | 55 |
東南東 | 256 | 西北西 | 38 |
南東 | 147 | 北西 | 158 |
南南東 | 78 | 北北西 | 814 |
あとはプロットするだけです。
wind_raw <- matrix(table(factor(wind$風向,levels=wind_label)),nrow=1)
wind_c <- wind_raw/sum(wind_raw)*100 #各日数を全日数の百分率に変換
par(family="HiraKakuProN-W3") #フォント指定(mac用)
radial.plot(wind_c, #プロットする値はベクタか行列で指定
line.col="red", #プロットする線の色
lwd = 2, #プロットする線の太さ
lty = 6, #プロットする線の種類
# 0.なし 1.実線(デフォルト) 2.- - - 3. ・ ・ ・
# 4.・ー・ー・ー 5.ーー ーー 6. −ー −ー
labels=wind_label, #ラベル(項目名)
rp.type="p", #表示方法
# r:radial lines(中心から伸びる直線)
# p: polygon(点を線で結ぶ)
# s: symbol(点)
radial.lim =c(0,20), # 枠(外周の円)の大きさ
start=pi/2, #グラフの描画を始める位置(ラジアンで指定)
clockwise=TRUE, #時計回りにプロット(Falseの場合、反時計周り)
radial.label = "" #軸目盛り
)
##実は……
Plotrixパッケージの中にはそのものずばり、oz.windroseという風配図を描くための関数が用意されていることを、この記事を書いている最中に知りました。
ただし、oz.windrose関数は風向と風速をまとめて表示するものなので、今回作りたいグラフとは少し違った形のものが出来上がります。詳しくはplotrixのHelpやdemoをご覧ください。
#参考サイト
今回のネタはdichika様のブログを参考にさせていただきました。
この場をお借りしてお礼申し上げます。
レーダーチャート(またの名をスパイダーチャート)を描く
http://d.hatena.ne.jp/dichika/20110202/1296653560
- 風配図についての説明:
http://ja.wikipedia.org/wiki/風配図 - 気象庁|過去の気象データ・ダウンロード: http://www.data.jma.go.jp/gmd/risk/obsdl/index.php
- RjpWiki
http://www.okada.jp.org/RWiki/