|
第13期,和大家讨论一下风玫瑰图的绘制。 风玫瑰图(Wind Rose)是气象学中描述风速和风向发生频率的图。由于风是矢量,常用的统计量如平均值、中值等可能错误地描述风速和风向在一段时间内的特征,比如反向风可能相互抵消,东北风(45°)和西北风(315°)的平均值为南风(180°)等。使用风玫瑰图,用概率来描述各风向、风速区间风的出现频率,可以避免这些问题,从而更准确地描述风在一段时间内的特征。 支持绘制风玫瑰图的工具有很多。NCL中提供WindRoseBasic等命令来实现;python的windrose库也可以绘制不同风格的风玫瑰图;R语言的windRose命令也可以提供类似操作。我最习惯使用的是MATLAB的WindRose工具箱,以下对其进行具体介绍。 WindRose工具箱由Daniel Pereira编写,至该推文撰写日,最后一次更新是在2020年3月5日,其最新代码和说明文件可从以下link下载: https://dpereira.asempyme.com/windrose/ 该工具箱的使用方法比较简单,只有WindRose一句主命令。具体语法为: , c' o" S. ~6 r" i5 @/ A
- ' _5 x9 T( B2 E
* b* } ~2 J, Z, h4 W! \
[figure_handle,count,speeds,directions,Table] = WindRose(dir,spd,Options);
: A9 z; W! g9 o* X% l7 p, J: t 2 i! d. K' C1 t" Z1 x1 o1 T
该命令中,输入量有三个:dir为风向时间序列(0-360,气象标准,0代表风从北方吹来,度数顺时针增大);spd为风速时间序列;Options为与图相关的各项设置,变量类型为Cell。Options内包含的设置选项非常多,比如风速、风向区间,colormap,文本及坐标标记,中心零风速设置,多图摆放等等。具体内容参考工具箱说明文件。 输出量有五个,使用场景不多,主要用于数据检查。figure_handle为图句柄,之前figure的所有设置参数都会保存在这里;count为矩阵,保存不同风向、风速区间风的出现频率;speeds为向量,保存风速区间分段的临界值;Table则以表格形式,具体记录的风玫瑰图中各个数值,适合检查错误。 以美国东海岸Nantucket Sound的风场观测为例。从美国NDBC的网站可以下载到该海域浮标44020在2010至2019年间的十年风场观测资料,在进行简单处理后,我们可以使用以下命令对2010-2019十年间44020站风场数据绘制风玫瑰图。由图我们可以直观的看到,该区域风速主要在4-12m/s,西南风居多。
1 j6 q O% P4 N& D' y6 C
: F6 X7 h, e. z( x* X/ R- a3 Y- ; ^8 C: \) u4 l+ n+ Z
- ) }0 a) L' f1 q) c
- # P; H# t( u6 O* D: D1 T8 v7 ^
% g J6 l. _7 f. z3 J6 \) h- ( K; n0 ]+ F7 R6 q; m
& p* T3 ?9 _6 Y7 f6 b! M- / W; l7 z# ]! f; \2 ]' ^/ X
- . u! z* W. I+ d0 e5 f
- 6 g/ N3 P2 w" L) @/ P m/ r# M: {
- 6 ?; M. R. l2 W0 H- X
7 a8 f$ |" U1 K: K
Options = {'anglenorth',0,... 'angleeast',90,... 'labels',{'N (0^o)','NE (45^o)','E (90^o)','SE (135^o)','S (180^o)','SW (225^o)','W (270^o)','NW (315^o)'},... 'freqlabelangle','auto',... 'MaxFrequency',6,... 'nFreq',6,... 'vWinds',[0 4 8 12 16],... 'LabLegend','Wind Speed (m/s)',... 'legendtype',2,... 'titlestring',''};[figure_handle,count,speeds,directions,Table] = WindRose(dir,spd,Options);, i( O) N6 \5 p, W7 n7 E' B
% G$ {. R, M& I
; a- k, l# t" g. ?- ]另外,该工具箱还很好地整合了MATLAB中subplot命令,进而在一张图中画多张子图。比如,对10年的风场数据按照季节分开,使用以下命令,可以绘制该海域不同季节的风场特点。可以看到,该海域夏季多西南风;冬季多西北风,且风速较大。
1 j) O+ f6 { k! A! k+ P- % l; ` b: h0 ~
; E" Z) q+ g8 A- # J* I* w+ I$ E9 D8 L
) Q& c! ^% |5 Y0 t% B* c% k- # g' P. E; b2 c* f- R! \
- # c/ \1 E0 J) }
3 m# O0 z1 [7 r- u. j. R- % |9 {% M. R5 r4 F8 a* b4 n
- % M' J* R6 `6 u
# f* v. o( X0 V' T `% i- , ?# [5 ^4 @# k* T; @
! H' D! G. P7 w% G# f
5 [5 E& F: Y5 v! x- 3 ~9 ^, D; \7 F- I3 C, }: `- A
' `8 E6 m5 i6 G0 @& i
figure('color','w')Options = {'anglenorth',0,... 'angleeast',90,... 'labels',{'','E','S','W'},... 'freqlabelangle','auto',... 'min_radius',0.25,... 'vWinds',[0 4 8 12 16],... 'MaxFrequency',8,... 'nFreq',4,... 'LabLegend','Wind Speed (m/s)',... };[figure_handle,count,speeds,directions,Table] = WindRose(dir_spring,spd_spring,[Options,{'titlestring','Spring'},{'legendtype',2},{'axes',subplot(2,2,1)}]);[figure_handle,count,speeds,directions,Table] = WindRose(dir_summer,spd_summer,[Options,{'titlestring','Summer'},{'legendtype',0},{'axes',subplot(2,2,2)}]);[figure_handle,count,speeds,directions,Table] = WindRose(dir_autumn,spd_autumn,[Options,{'titlestring','Autumn'},{'legendtype',0},{'axes',subplot(2,2,3)}]);[figure_handle,count,speeds,directions,Table] = WindRose(dir_winter,spd_winter,[Options,{'titlestring','Winter'},{'legendtype',0},{'axes',subplot(2,2,4)}]);- p1 D5 [# H5 q5 o& w s
, {& S' _/ P* a. H1 i; u
Tip: 在画多图时,最好在画图前先使用
/ T H( \: C2 ]7 D2 O- }2 I
/ J# S3 u" ^ T$ k# |# A/ v% y, p$ a4 `& J! a
figure('color','w')* J( r8 d& `* r5 ]% D: N
7 t% D5 b2 D$ o否则,第一张分图和legend部分可能会变成MATLAB默认画图底色(一般为灰色)。Options中有figcolor选项来更改图底色,然而我测试时依然有上述bug。如果你也遇到相同问题,不妨尝试该方法。 Reference: 浮标数据: https://www.ndbc.noaa.gov/station_history.php?station=44020 各语言中风玫瑰图的相关命令介绍: https://www.ncl.ucar.edu/Applications/rose.shtml https://pypi.org/project/windrose/ https://www.rdocumentation.org/packages/openair/versions/2.7-2/topics/windRose https://dpereira.asempyme.com/windrose/
# G c4 }4 _9 g |