风向玫瑰图

风向玫瑰图(wind rose)是专门用于描述风向分布和频率的极坐标分布图,由于形状酷似玫瑰花朵而得名。图1是咸阳某年的风向玫瑰图,表达出风向的频率或者频次分布。风向玫瑰图上一般还具有风速信息,通过颜色或灰度来表示风速,如图2。
图 1   咸阳某年的风向玫瑰图

图 1 咸阳某年的风向玫瑰图

请添加图片描述

图 2 上海某年的风向玫瑰图

玫瑰图虽然来源于气象学,但还可以用于描述地面坡向、运动方向的分布等。风速信息也可以用方向上的其他物理量代替,因此,风向玫瑰图有着优秀的表达能力和更多的应用空间。图3是某地坡向的玫瑰图,色块颜色表示局部区域的表面高程变化,因此图3描述了表面高程变化与坡向之间的分布规律。
请添加图片描述

图 3 某地坡向与地面高程变化的玫瑰图

Matlab存在多个玫瑰图的绘制函数,本文拟对Matlab中的玫瑰图绘制函数进行介绍,并总结函数的优缺点,主要有Matlab自带的rose(thera)、个人编写的wind_rose(D, I, varargin)和WindRose(D, I, varargin)三个。希望对读者未来的玫瑰图绘制中有所帮助。

风向数据

本文采用的风向数据是国家极地科学数据中心发布的东南极中山站2011-2012年间风向(D,单位:°)、风速(I,单位:m/s)数据。在此表示感谢!

Matlab自带的函数

语法:rose(thera, nbin)
说明:thera是风向,单位为弧度。nbins表示平均划分区间[0, 2*pi]的数量。绘制图件上的玫瑰“花瓣”表示该区间风的次数。rose(D×pi/180)运行结果如图4所示。可以看出,rose(D×pi/180)绘制的极坐标系0度方向为水平向右,这与常见的风向玫瑰图不同。常见的风向玫瑰图遵循上北(0°)下南(180°)左西(270°)右东(90°)。可以用view(90, -90)将坐标系调整至习惯用法,如图5所示。
请添加图片描述

图 4 rose(D×pi/180)运行的直接结果

请添加图片描述

图 5 rose(D*pi/180)运行结果经view(90, -90)调整

评价:Matlab自带的rose()功能简单,只能绘制风向的频次分布;而且绘制结果中的坐标系与习惯不符,需要对结果进行调整。

个人编写的函数1

语法:wind_rose(D, I, varargin)
说明:D表示风向,单位是°;I表示风速;varargin是各种控制参数,常见的控制参数有:

  • ‘dtype’,描述坐标系属性,默认的坐标系是笛卡尔坐标系,横轴为0°方向,逆时针方向为正。当‘dtype’是‘meteo’时,调整坐标系为风向玫瑰图的习惯用法,纵轴为0°方向,顺时针方向为正。
  • ‘ci’,频率圈绘制的值,单位为%。
  • ‘n’,区间划分的个数。
  • ‘lablegend’,图例的标题。
  • ‘legtype’,是否绘制图例。

wind_rose(D, I, ‘dtype’,‘meteo’,‘ci’,[20 40],‘legtype’,1)的绘制结果如图6所示。
请添加图片描述

图 6 wind_rose(D, I, 'dtype','meteo','ci',[20 40],'legtype',1)的绘制结果

评价:wind_rose()函数能表达风向的频率分布和风速范围,风速采用不同的颜色表示。此外,wind_sose()可以选择不同的坐标系。

个人编写的函数2

语法:WindRose(D, I, varargin)
说明:D表示风向,单位是°;I表示风速;varargin是各种控制参数,常见的控制参数有:

  • ‘anglenorth’,正北方向的角度。
  • ‘angleeast’,正东方向的角度。
  • ‘labels’,各方向注记(参考后面调用,即可明白)。
  • ‘MaxFrequency’,最大的频率。
  • ‘nFreq’,频率圆的个数。
  • ‘vWinds’,图例中的风速数字注释。
  • ‘LabLegend’,图例的标题。
  • ‘legendtype’,是否添加图例。
  • ‘scalefactor’,图片放大缩小的倍数

调用WindRose()的代码如下,结果如图7所示。

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',-22.5,...
    'MaxFrequency',40,...
    'nFreq',5,...
    'vWinds',[0 4 8 12 16 20],...
    'LabLegend','Wind Speed (m/s)',...
    'legendtype',1,...
    'scalefactor',0.8,...
    'titlestring',''};
[figure_handle,count,speeds,directions,Table] = WindRose(D,I,Options);

请添加图片描述

图 7 WindRose()绘制结果

评价:WindRose()拥有更多的参数可以设置风向玫瑰图,包括坐标系、方向注记、图例标题等,其图例采用的是渐变色。

总结

对比上述三个风向玫瑰图绘制函数可以发现,WindRose()函数的功能更加丰富,参数设置更为多元,默认的色彩搭配也比wind_rose()好。Matlab自带的rose()函数功能过于单一,不适合用于科研绘图。需要注意的是,函数WindRose()和wind_rose()中读取的风向单位是°,留意数值单位的转换。

代码传递

wind_rose()和WindRose()的代码及使用文档如下:
链接:https://pan.baidu.com/s/1LEZynWNNEQT-Gp2JuRVtmA
提取码:4h56

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐