Code covered by the BSD License  

Highlights from
Wind_rose

4.58537

4.6 | 43 ratings Rate this file 151 Downloads (last 30 days) File Size: 5.21 KB File ID: #17748
image thumbnail

Wind_rose

by M MA

 

26 Nov 2007 (Updated 17 Jun 2010)

Wind rose of direction and intensity

| Watch this File

File Information
Description

    Syntax:
       [HANDLES,DATA] = WIND_ROSE(D,I,VARARGIN)
 
    Inputs:
       D Directions
       I Intensities
       VARARGIN:
        -dtype, type of input directions D, standard or meteo,
             if meteo, the conversion dnew=mod(-90-D,360) is done;
             if not meteo, standard is used (default)
        -n, number of D subdivisons
        -di, intensities subdivisons, default is automatic
        -ci, percentage circles to draw, default is automatic
        -labtitle, main title
        -lablegend, legend title
        -cmap, colormap [jet]
        -colors, to use instead of colormap, for each di
        -quad, Quadrant to show percentages [1]
        -ri, empty internal radius, relative to size of higher
             percentage [1/30]
        -legtype, legend type: 1, continuous, 2, separated boxes [2]
        -bcolor, full rectangle border color ['none']
        -lcolor, line colors for axes and circles ['k']
        -percbg, percentage labels bg ['w']
        -ax, to place wind rose on pervious axes, the input for ax
             must be [theax x y width], where theax is the previous
             axes, x and y are the location and width is the wind
             rose width relative to theax width (default=1/5)
        -parent, by default a new axes is created unless parent is
                 given, ex, parent may be a subplot
        -iflip, flip the intensities as they go outward radially, ie,
                 highest values are placed nearest the origin [{0} 1]
        -inorm, normalize intensities, means all angles will have 100%
        -incout, if 0, data outside di limits will not be used [0 {1}]
 
    Output:
       HANDLES Handles of all lines, fills, texts
       DATA Wind rose occurences per direction and intensity

MATLAB release MATLAB 6.5 (R13)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (88)
28 Nov 2007 olas herees  
07 Jan 2008 Stefano de' Rossi

Really good work

23 Jan 2008 C Dillard

I was thrilled when I found this plot, it is exactly what I needed until.....

Beware: This plot does not place wind directions (in degrees) into a normal compass heading where north (0) is facing up, east (90) is facing right, south (180) is facing down, and west (270) is facing left.

I admit that I may be using the script wrong (I am not a matlab expert) but a simple test of one compass heading at a time proved that I am correct.

07 Feb 2008 Jacopo Chiggiato  
20 Feb 2008 Sebastian D.

Same comment than C Dillard,

Exact routine that I needed and very nice graphic output.

But the plot is given using polar -or math- system (that is the Matlab default output) while most of the wind data are generally given with the Meteorologic system. Not a huge deal 'per se' (I quickly wrote a 'met2polar' routine to convert my data; basically: D = 360-(metangle-90) & D(D>360) = D(D>360)-360) but it would have been nice if it has been incorporated into the routine directly (or commented in the header).

If not really, it's a good work and this routine is perfect for my day2day work.

22 Feb 2008 M MA

the meteo2polar is simpler than that:
dnew=mod(-90-d,360)

Many people have been asking for this, so I added a new varargin option in wind_rose: 'dtype' as 'meteo' or 'standard' (polar).
thanks for the comments

26 Feb 2008 JUAN R.A

THNKS

05 Mar 2008 LJM MJ  
13 Mar 2008 Isabella Osetinsky

Meteo to math angle is
math_angle=90-meteo_angle,
not -90-meteo_angle as in your .m code

26 Mar 2008 Isabella Osetinsky

Sorry,
you were right,
math angle = -90 - meteo angle.

31 Mar 2008 worachat wannawong

help me plz.

22 Apr 2008 idris mandang

wind rose

25 Apr 2008 G H

The plots look great.

I originally had trouble getting the wind angles to turn out correctly - my inputs have 0 = wind from North, 90 = wind from East, etc.

I did some testing and found that if I did new_dir = mod(90-test_dir,360) (NOT -90!) and then did the standard wind rose, it came out right.

29 Apr 2008 min liu

great

09 May 2008 Jadran Jur

Comments is same like From: C Dillard(sodillard@gmail.com)

Comments: "I was thrilled when I found this plot, it is exactly what I needed until..... " Beware: This plot does not place wind directions (in degrees) into a normal compass heading where north (0) is facing up, east (90) is facing right, south (180) is facing down, and west (270) is facing left. I admit that I may be using the script wrong (I am not a matlab expert) but a simple test of one compass heading at a time proved that I am correct. "
:just try with
D=[180 350];
V=[2 4];
wind_rose(D,V)...
result is wind_rose that has direction east2west

12 May 2008 M MA

I suggest you to read the help of this function. Notice the dtype varargin option:

"-dtype, type of input directions D, standard or meteo, if meteo, the conversion dnew=mod(-90-D,360) is done; if not meteo, standard is used (default)"

18 May 2008 g l

Many thanks. Nice routine, but I must add my voice to others here. The conversion from meteo to cartesian should be new_dir = mod(90-test_dir,360) as meteo convention is wind direction FROM and cartesian is vector directed TO. I would have thought that the simple test
D=270
V=1
wind_rose(D,V,'dtype','meteo')
should result in a single bar COMING FROM the west. In the present routine it does not. It is a simple fix to correct this behaviour, as previously pointed out.

Thanks again.

19 May 2008 worachat wannawong

How to plot wind rose? Somebody help me plz... Plz give the example code in Matlab and data test case for me.
Thank you Prof.
Worachat

20 May 2008 M MA

G L. You are not right, the convertion is mod(-90-D,360). But anyway this utility has nothing to do about wind!! Or conventions !! The convertions to meteo convention was introduced because some people asked it!. Believe me, there are others conventions on directions of other fields. This is an Intensity/Frequency/Direction Plot! It has NOTHING to do about wind. So anybody can convert any direction to any other direction and and use wind_rose with standard direction.

20 May 2008 g l

MMA

You are correct that the meteo conversion for wind or waves is USUALLY mod(-90-D,360). However the test wind_rose(270,1,'dtype','meteo') also proves that this routine does not work the way it should FOR WIND. I think your comments make it clear that the routine should be renamed just rose.m and drop the "meteo" direction conversion option because the "meteo" convention is different for wind, waves, and currents.

I regret that this ongoing discussion of conventions has obviously caused you trouble, and thank you again for contributing a useful routine to the Matlab community.

28 May 2008 yanqing feng

very good!

06 Aug 2008 junsang cho

very good job!!!

11 Aug 2008 Lee Linda

I do not know the reason. But I tried 90-D for wind direction. It looks it is right. Could MMA explain it more detail? Thanks.

14 Aug 2008 Just Jess

Is there a way to show when there is no wind? Calm times should be included in the percentages, but it looks like there is no way to do this with the current code. Any suggestions?

01 Sep 2008 romain blot

Hello, I would like to know if you have noticed a maximum size for wind and direction data input? I try to plot 1 month data with 10min time scale...and it doesn't work...
Thank you...

27 Oct 2008 FJ Way

Good, however it seems that the northern bin may have a bug. If I want 22.5 degree bins (nAngles=16), then the first bin is -11.25 to +11.25 (which is good). But the Ay breakdown and input data is from 0 to 360 (i.e., nothing from -11.25 to 0). So the northern bin is usually about half the size it should be.

08 Nov 2008 Zheng i

很好用的!角度及方向可以调整。但是我还不知道'di'到底是怎么用的,谁能告诉我?

08 Nov 2008 Zheng i

Very Good! But I don't know how to use 'di', who can help me please? Thanks!

10 Nov 2008 D S

I am a new user to MatLab, so this may be a ridiculously obvious question, but I have got my inputs in the D and I format and ran the following syntax:

HANDLES = wind_rose(D,I,varargin,'meteo');

I then got this error message:

??? Attempt to execute SCRIPT varargin as a function:
C:\Program Files\MATLAB\R2007b\toolbox\matlab\lang\varargin.m

Can someone help me please?

Thankyou

11 Nov 2008 Carlos Adrian Vargas Aguilera

Dear D S: you should write this kind of quenstions on the Newsreader (where many people will be glad to help you) or write directly to the author. Look at 5 statements here below. Carlos

16 Jan 2009 b vs  
16 Jan 2009 b vs

Hello MMA,
Great m-file. However I am not a matlab expert and cannot get the legend right in my figure. Do you maybe have the example input of the figure that is shown on the top of this file, so that I can make slight changes towards my own case?

25 Apr 2009 Marcos Cesar Ruggeri  
25 Apr 2009 Marcos Cesar Ruggeri

There is a problem when you want to print the graphic. The
background color (facecolor) is set in black and cannot be changed.

In order to fix it, write at the end of the code:

set(gcf,'color','w');
set(gca,'color','w');

Thanks and good job.

M.

25 Apr 2009 Marcos Cesar Ruggeri

Wind directions are inverted.
If the vector D represents all values of wind directions COMING FROM (BLOWING FROM), rewrite line #147 as follows:

D=mod(90-D,360);

Thanks.

M.

30 Apr 2009 M K

The 'ci' option to force the percentage intervals appears to not work. If you change from one interval to another the length of the colored blocks stays the same, while the scale changes.

02 May 2009 malak voinis

please what kind of data is the argument F needed by the function WIND_ROSE(D,F,VARAGIN) ?

13 May 2009 Juan C

Really nice work, but I have a question, How can I plot the wind rose on a subplot?

17 Jun 2009 Victoria

It's beautiful, but I would also like to know how to plot the wind rose on a subplot.

17 Jun 2009 Victoria

To plot in a subplot, find "parent=0" and replace "0" with whichever grid cell you want it in your subplot. eg. to place it in the lower left corner of a 2X2 plot of subplots, type "parent=subplot(2,2,4)"

25 Jun 2009 Victoria

MMA

Everything is working great but when I print the plot (either to paper or to a jpeg file), the background turns black. Do you know how to fix this?

Thanks! Victoria

14 Sep 2009 Marcos Cesar Ruggeri

Victoria:

Please read my comment above. I had the same problem, but finally I could solve it!

Thanks,

Marcos Cesar Ruggeri

08 Oct 2009 Cegeon  
18 Nov 2009 Eleanor

Hi there,
I would like to specify my own colour choices for 'di'. Does anyone know what format 'color' should be specified in.
Many thanks,
Eleanor

08 Jan 2010 Øyvind

Great function!
But how about adding the option to have the angle following a normal compass?

line 159-162
% directions conversion:
if isequal(dtype,'meteo')
  D=mod(-90-D,360); % For wind coming FROM an angle
elseif isequal(dtype,'compass')
 D=mod(90-D,360); % For something going toward an angle of a % compass, ie. 0 deg = North, 90 deg = East, 270 deg = West
end

And a simple explanation in the help-section.

23 Jan 2010 Andrea

Thanks Marcos Cesar Ruggeri for the tip with the white background for the printing. That really helped :-)

Anyways, have another question now. I printed the windrose as a subplot with to otherplots. But when I do this, the windrose appears very tiny and not really readable. Does somebody know how I can resize the plot an make it bigger? Did somebody encounter the same problem?

Thanks for your help!

14 Jun 2010 Li Liao

I simply test the code, and seems there was something wrong in it, here is the test:
a = [90 3;90 4;90 5;90 6;90 7;90 8;90 9; 180 3; 180 4; 180 5]
wind_rose(a(:,1),a(:,2))
the percentage shown in the figure was not correct.

17 Jun 2010 M MA

Dear Li Liao.
Yes you are right. I already fixed a small bug I found and uploaded the new version.
The percentages where wrong only when using intensities equal to the lower value of the highest intensity subdivision, basically an academic case.
Thank you

18 Jun 2010 Chris  
20 Jun 2010 pink

how to use wind rose

27 Jun 2010 TideMan

If you're printing the wind rose, you need to do this:
set(gcf,...
    'InvertHardcopy','off')
otherwise the background will be black.

29 Jun 2010 Seb Biass

Hello!

Thanks a lot for this super cool script. I have a question about how to plot a wind rose in the axes within a GUI.

If I do:
fig = figure
ax = axes('Parent', fig)
wind_rose(d, v, 'ax', [ax .5 .5 1])
the wind rose plots nicely in the middle of the axes, perfect, everyone is happy.

Now, I have a GUI with axes (let's say called plot1). What I am trying to do is:
axes(handles.plot1) % get the focus
ax = gca % get current aces
wind_rose(d, v, 'ax', [ax .5 .5 1])

nothing is plotted, or plotted somewhere not visible. I tried changing all x and y, or the ratio, but nothing. I don't know if I am not calling the good axes (can you use gca in a GUI?!?!).

Did anyone have the same problem? Does anyone have an idea on how to fix it?

Cheers guys!

S.

29 Jun 2010 Seb Biass

... with an obvious ax = gca in between...

01 Jul 2010 M MA

Dear Seb

The option 'ax' is used to place the wind rose over an existing axes. But a new axes is created and placed over the other.

What you should do is to use the option 'parent' which let you choose the wind rose axes.

do this:
wind_rose(d, v, 'parent',ax)

In your first example,
ax = axes('Parent', fig)
wind_rose(d, v, 'ax', [ax .5 .5 1])

a new axes was created ... if there was something ploted in ax you wouldn't see it since wou chose to use the full ax width (1).

However I noticed that there is a missing line of code for the option 'parent' to work properly:
add axes(parent) after the line 252 (of the latest version). I will update this soon...

23 Jul 2010 Guillaume

Thank for your script.

I juste change the definition of meteo flag.
For an imputed wind in math mod (positive=anti-clockwise, defined from the horizontal axis) and for representation in meteorological convention (wind blowing FROM and angle since North conted positively in clockwise) I change
D=180+D and it's look to work find with the example in the script.

Cheers,
Guil

23 Jul 2010 Andras

Dear M MA,

I think the angles are still wrong.

Take this very simple example:

wind_rose(180,1,'dtype','meteo') will generate a plot pointing to the north, while wind_rose(180,1,'dtype','standard') will point to the west. If this is wind data, you would want it pointing to the south, but neither setting gives you that.

Best wishes,
Andras

30 Jul 2010 YJ LEE

% Input data SHOULD be meteological wind data coming from
% ie. 0 deg=North, 90 deg=East, 180 deg=South, & 270 deg=West
% if 'dtype' is 'ocean'; to do coversion mod(-90-D,360) and
% to plot wind direction from meteolocal convention
% (coming from) to oceanographci convention (going to)
% if 'dtype' is 'meteo'; to do coversion mod(90-D,360) and
% to plot wind direction in meteolocal convention
% In case, input data are in oceanographic convention. Without 'dtype'
% option, wind_rose will plot wind going to. It is same results when
% 'dtype' is 'ocean' using wind data coming from (meteological convention)

14 Oct 2010 Camille Couzi

Hi again I have solved my previous problem using the follofwing command:
set(eje,'nextplot','replacechildren');
Now I get a pbm with the 'di':
I write:
wind_rose(D(:,num_col),V(:,num_col),'parent',eje,'n',16,'di',6)

and I get:
??? Attempted to access Ag(2); index out of bounds because numel(Ag)=1.

Error in ==> wind_rose at 207
    E(i,1)=length(find(b<Ag(2)));
... any idea about how to solve that?

Question about meteo correction, my data has 0º of direction when the current go to the north. What meteo correction should I apply? D=mod(90-D,360); or D=mod(-90-D,360);

thanks again for your help

26 Oct 2010 Kevin Tang

I got a problem: I want to add more axes eg. every 30 degrees instead of only north, south, east and west.
Then how should i do it?

02 Nov 2010 Cesar Manuel Diez Chirinos

if you want to indicate only the points of the axis, you could play with the positions of ri and g, on the lines of the axis (you'll find North, South,etc at the end of the line), but if you want to line them I'll check it

11 Nov 2010 Alexandre

First of all obrigado

The script works fine for me but...

I want to add wind roses without adding the data because would be extremely slow and I want to use the bin extraction you already have script.
That is: windrose(A1,B1)*n1+windrose(A2,B2)*n2
n1,n2 are sufficient high to do it like A=[A1,....,A1_n1;A2,....,A2_n2] so I have to find another solution
I do not know which variables I should manipulate

Grazas again

18 Nov 2010 Ben Williams

Great file. HOWEVER: I have found that there is an issue with the way directions are plotted when appraoching between 90deg N and 180deg N. The data is plotted 180degrees out of 'true' - i/e/ something appraching from say 120deg is plotted as approaching from 330deg.

01 Mar 2011 Anna Larsen

Hello..
I'm not a matlab expert. How can I use the script to generate a wind rose when I only have wind directions in a vektor D,
the probabilities of wind in directions in a vektor F
and mean wind speeds U?
I only want to generate a wind rose showing mean wind speeds in the different directions.

D = [0 30 60 90 120 150 180 210 240 270 300 330],
F= [5.8 4.1 3.7 4.3 7.1 13.3 12.3 10.6 9.5 11.9 9.5 8.0]
U = [7.6 6.6 5.9 6.0 6.8 8.0 8.7 8.5 8.1 7.8 8.4 8.2].

23 Mar 2011 Cesar Manuel Diez Chirinos

To add more axis play with:
h(1)=text(g+2*ri, 0,'E', 'VerticalAlignment','top', 'HorizontalAlignment','left', args{:},'FontSize',18);

13 Apr 2011 Dan

Awesome code! I initially had trouble with wind direction being off as well. I was able to correct this problem by changing the 'dtype' 'meteo' conversion to:

D=mod(-270-D,360);

I didn't read all of the previous comments so not sure if this fix has already been provided or not...

25 Apr 2011 Jeff Hansen

Would be nice to have the option to make the concentric rings be associated with the intensity and the color be probability?

28 Apr 2011 Cesar Manuel Diez Chirinos

Try this code, to make the concentric rings associated with intensity:
wind_rose(D,V,'dtype','meteo')
good luck

30 Apr 2011 Henrik Grythe

Very nice

24 Jun 2011 Hydroman S

Great function.
Can you call out the speed corresponding to each direction subdivision?

24 Jun 2011 Sander

Hi,

Thanks for this function. Has proven to be very useful in Bsc thesis project (designing Dutch airport of the future). A great way to visualise large wind datasets.

24 Jun 2011 Cesar Manuel Diez Chirinos  
26 Jun 2011 Cesar Manuel Diez Chirinos

Hi Hydroman S, if you visit my web page, you'll find some works related, just take a look and have someway to represent the speed and direction subdivision,
I called vectorial decomposition to some kind of graphics, just have a look,

http://clever.design.officelive.com/projects

11 Jul 2011 D

Great function!
I agree with Dan. For meteorological uses
D=mod(-270-D,360);
wind-rose(D,V)
works well

12 Jul 2011 D

How can I fix the intensity scale to compare different wind roses?

01 Aug 2011 Antriksh

Very Handy! Thank you very much for your good work.

04 Aug 2011 Felix

Nice, handy piece of m-code. After D-mod-adjustment it worked fine for my purpose.
Thx a lot

05 Aug 2011 Aurélien BERTIN  
05 Sep 2011 qi

Very good ! Thank you!

12 Sep 2011 Stu G

A great function after the modification of D=mod(-270-D,360);. How can I force the intensity and direction percentage scales so all wind roses have the same axes and be compared easily?

12 Sep 2011 Stu G

Solved, for example:
Wind_rose_2006 = wind_rose(Directions_2006,Velocities_2006,'ci',[10 20 30],'di',[0:1:10],'lablegend',' (ms^{-1})','dtype','meteo');

06 Oct 2011 Boma Kresning

pls send it to bkresning@yahoo.com

06 Oct 2011 Boma Kresning

could anybody help me with a full example using this function? i am new to matlab, i've tried to fill in the input but error occured.

pls send it to bkresning@yahoo.com , it will help me a lot. thx

02 Dec 2011 Bryan Kappa

A unit vargin would be good, so that the units would show up next to the intensities in the legend (m/s, ft/s, mi/hr, etc).

Thanks for making this.

10 Dec 2011 Michael Pikridas

It took me a while but I got it. Great function. Now I am trying to figure out the handles order.

14 Dec 2011 Bryan Kappa

I need more functionality on labeling the polar axis. I need to label the axis in degrees, and I can't submit the images in my report unless they have labels.

I tried messing with the code to get it to work, but haven't been able to figure it out yet. Any ideas?

15 Dec 2011 Michael Pikridas

There are handles available that include the labels of the legend too.

The problem is that the handles change by plot. So if in one plot the legend title handle is h(20) in another one is h(22) so you have to change them in each plot which is cumbersome.

This is what I am trying to figure out actually.

19 Dec 2011 Fredrik

Great! Just a question, how can I get the length of each bar to be determined by the sum of values inside limits instead of number of values inside limits? (So that I can create an energy rose instead of just a wind rose)

22 Dec 2011 Poul Reitzel

Thanks for a functional, easy to use program, M Ma.

I have one question:

I am plotting a "damage rose" (damage calculated using the Palmgren-Miner damage summation rule), in which i want to plot the damage caused by waves with different wave height from 4 different incident directions on a structure. I want to plot the rose with wave heights on the legend but damage (a number between 0 and 1 for each wave) on the rose. So all in all i have three vectors: One for incident directions, one for wave heights for each direction and a final containing the damage caused by each wave height. All vectors have the same length of course. Is there a way to solve my problem using your algorithm, or does it require modifications from my side?

- Best regards
Poul

Please login to add a comment or rating.
Updates
10 Dec 2007

added user option ci, values of the percentage circles

22 Feb 2008

added option to use meteo convention directions.
added a couple of other options in varargin (place over another plot, choose colors to use in colorbar directly)

12 May 2008

Bug fix (bar at dir=0 could be incorrect in some cases)

14 May 2008

Added varargin iflip:
flip the intensities as they go outward radially, ie, highest values are placed nearest the origin [{0} 1]

04 Jun 2009

-Added varargin option parent, to select the axes/subplot where to place the wind rose
- bug fix: when di, was not provided the auto mode could, in some cases, merge the data of the two smallest subdivisions

10 Jun 2009

Added incout option: if 0, data outside di limits will not be considered. By default is 1.

17 Jun 2010

Small Bug fix. The percentages where wrong when using intensities equal to the lower value of the highest intensity subdivision, basically an academic case.

17 Jun 2010

Small Bug fix. The percentages where wrong when using intensities equal to the lower value of the highest intensity subdivision, basically an academic case.

Tag Activity for this File
Tag Applied By Date/Time
specialized M MA 22 Oct 2008 09:36:47
plotting M MA 22 Oct 2008 09:36:47
wind rose M MA 22 Oct 2008 09:36:47
direction M MA 22 Oct 2008 09:36:47
intensity M MA 22 Oct 2008 09:36:47
graphics M MA 22 Oct 2008 09:36:47
specialized plot M MA 22 Oct 2008 09:36:47
direction Nicco Plamonia 23 Dec 2008 01:24:31
wind rose Nicco Plamonia 23 Dec 2008 01:25:01
graphics Nicco Plamonia 27 Dec 2008 01:14:34
plotting Donald 07 Jan 2010 20:28:30
intensity Donald 07 Jan 2010 20:28:34
wind rose Marcos Afonso 14 Apr 2010 12:35:17
i am trying to run the wind_rosem but there is an error Jurgi Areizaga 04 May 2010 11:02:58
hy Jurgi Areizaga 04 May 2010 11:03:01
thank you Jurgi Areizaga 04 May 2010 11:03:10
wind_rose gabbaging 01 Jun 2010 06:35:42
direction Alireza Balalan Fard 28 Jun 2010 03:46:39
direction Matthew 10 Dec 2010 08:52:06
direction Goh 02 May 2011 23:24:57
direction Johannes 28 Jul 2011 04:38:54
direction Naga Chaitanya Kavuri 16 Aug 2011 02:05:43
graphics Naga Chaitanya Kavuri 16 Aug 2011 02:05:51
wind rose Naga Chaitanya Kavuri 16 Aug 2011 02:05:55
wind_rose Naga Chaitanya Kavuri 16 Aug 2011 02:06:00
plotting kasper jakobsen 07 Sep 2011 05:32:16

Contact us at files@mathworks.com