风向玫瑰图 matlab,Matlab如何制作风玫瑰图

% check if has values higher or lower than the Ag limits

hasH=length(find(F>=Ag(end)));

hasL=length(find(F

% calc number of percentage circles to draw:

if isempty(ci)

dcircles=[1 2 5 10 15 20 25 30 50];

ncircles=3;

d=abs(1./(dcircles/max(b))-ncircles);

i=find(d==min(d));

d=dcircles(i(1));

if d*ncircles

ncircles=ncircles+1;

end

ci=[1:ncircles]*d;

g=ncircles*d;

else

ncircles=length(ci);

g=max(max(ci),max(b));

end

% plot axes, percentage circles and percent. data:

wrAx=axes('units','normalized');

ri=g*ri;

handles(end+1)=fill([-rs*g rl*g rl*g -rs*g],[-rs*g -rs*g rs*g rs*g],'w',...

'EdgeColor',borderColor);

if onAxes

set(handles(end),'facecolor','none')

end

hold on

handles(end+1)=plot([-g-ri -ri nan ri g+ri nan 0 0 nan 0 0],...

[0 0 nan 0 0 nan -g-ri -ri nan ri g+ri],':','color',lineColors);

t0=[0:360]*pi/180;

labs=[];

Ang=[1/4 3/4 5/4 7/4]*pi;

Valign={'top' 'top' 'bottom' 'bottom'};

Halign={'right' 'left' 'left' 'right'};

for i=1:ncircles

x=(ci(i)+ri)*cos(t0);

y=(ci(i)+ri)*sin(t0);

handles(end+1)=plot(x,y,':','color',lineColors);

labs(i)=text((ci(i)+ri)*cos(Ang(quad)),(ci(i)+ri)*sin(Ang(quad)),[num2str(ci(i)),'%'],...

'VerticalAlignment',Valign{quad},'HorizontalAlignment',Halign{quad},...

'BackgroundColor',percBg,'FontSize',8);

end

handles=[handles labs];

% calc colors:

if isempty(colors)

cor={};

for j=1:length(Ag)-1

cor{j}=caxcolor(Ag(j),[Ag(1) Ag(end-1)],cmap);

end

else

cor=colors;

end

% fill data:

n=sum(E,2);

if iflip, E=fliplr(E); end

for i=1:length(Ay)-1

if n(i)

t=linspace(Ay(i),Ay(i+1),20)*pi/180;

r1=ri;

for j=1:length(Ag)-1

r2=E(i,j)/n(i) *b(i) +r1;

x=[r1*cos(t(1)) r2*cos(t) r1*cos(fliplr(t))];

y=[r1*sin(t(1)) r2*sin(t) r1*sin(fliplr(t))];

if iflip, jcor=length(Ag)-1-j+1;

else, jcor=j;

end

if E(i,j)>0, handles(end+1)=fill(x,y,cor{jcor}); end

r1=r2;

end

end

end

axis equal

axis off

uistack(labs,'top')

% N S E W labels:

bg='none';

args={'BackgroundColor',bg,'FontSize',8};

h(1)=text(-g-ri, 0,'WEST', 'VerticalAlignment','top',   'HorizontalAlignment','left', args{:});

h(2)=text( g+ri, 0,'EAST', 'VerticalAlignment','top',   'HorizontalAlignment','right',args{:});

h(3)=text( 0,-g-ri,'SOUTH','VerticalAlignment','bottom','HorizontalAlignment','left', args{:});

h(4)=text( 0, g+ri,'NORTH','VerticalAlignment','top',   'HorizontalAlignment','left', args{:});

handles=[handles h];

% scale legend:

L=(g*rl-g-ri)/7;

h=(g+ri)/10;

dy=h/3;

x0=g+ri+(g*rl-g-ri)/7;

x1=x0+L;

y0=-g-ri;

if legType==1 % contimuous.

for j=1:length(Ag)-1

lab=num2str(Ag(j));

if j==1 & hasL & ~IncHiLow

lab='';

end

y1=y0+h;

handles(end+1)=fill([x0 x1 x1 x0],[y0 y0 y1 y1],cor{j});

handles(end+1)=text(x1+L/4,y0,lab,'VerticalAlignment','middle','fontsize',8);

y0=y1;

end

if ~ (hasH & ~IncHiLow)

handles(end+1)=text(x1+L/4,y0,num2str(Ag(end)),'VerticalAlignment','middle','fontsize',8);

end

elseif legType==2 % separated boxes.

for j=1:length(Ag)-1

lab=[num2str(Ag(j)) ' - ' num2str(Ag(j+1))];

if j==1 & hasL & ~IncHiLow

lab=['

end

if j==length(Ag)-1 & hasH & ~IncHiLow

lab=['>=',num2str(Ag(j))];

end

y1=y0+h;

handles(end+1)=fill([x0 x1 x1 x0],[y0+dy y0+dy y1 y1],cor{j});

handles(end+1)=text(x1+L/4,(y0+dy+y1)/2,lab,'VerticalAlignment','middle','fontsize',8);

y0=y1;

end

end

% title and legend label:

x=mean([-g*rs,g*rl]);

y=mean([g+ri,g*rs]);

handles(end+1)=text(x,y,titStr,'HorizontalAlignment','center');

x=x0;

y=y1+dy;

handles(end+1)=text(x,y,legStr,'HorizontalAlignment','left','VerticalAlignment','bottom');

if onAxes

place_wr(onAxes,wrAx,onAxesX,onAxesY,onAxesR);

end

if nargout==1

varargout{1}=handles;

end

function place_wr(ax,ax2,x,y,width)

if nargin < 5

width=1/5;

end

uax=get(ax,'units');

pax=get(ax,'position');

set(ax,'units',uax)

axXlim=get(ax,'xlim');

axYlim=get(ax,'ylim');

x_ax2=pax(1)+pax(3)*(x-axXlim(1))/diff(axXlim);

y_ax2=pax(2)+pax(4)*(y-axYlim(1))/diff(axYlim);

pax2=get(ax2,'position');

width=pax(3)*width;

height=pax2(4)*width/pax2(3);

pax2=[x_ax2 y_ax2 width height];

if 1

% place at centre of the wr, not the bottom left corner:

ax2Xlim=get(ax2,'xlim');

ax2Ylim=get(ax2,'ylim');

dx=(0-ax2Xlim(1))/diff(ax2Xlim)*pax2(3);

dy=(0-ax2Ylim(1))/diff(ax2Ylim)*pax2(4);

x_ax2=x_ax2-dx;

y_ax2=y_ax2-dy;

pax2=[x_ax2 y_ax2 width height];

end

set(ax2,'position',pax2)

function cor = caxcolor(val,cax,cmap)

%CAXCOLOR   Caxis color for value

%   Find the color for a given value in a colormap.

%

%   Syntax:

%     COLOR = CAXCOLOR(VALUE,CAXIS,COLORMAP)

%

%   Inputs:

%      VALUE

%      CAXIS   Default is current caxis

%      COLORMAP   Default is current colormap

%

%   Output:

%      COLOR   RGB color vector

%

%   Example:

%      figure

%      pcolor(peaks)

%      color=caxcolor(0);

%      set(gcf,'color',color)

%

%   MMA 28-5-2007, martinho@fis.ua.pt

% Department of Physics

% University of Aveiro, Portugal

if nargin < 3

cmap = get(gcf,'colormap');

end

if nargin < 2

cax = caxis;

end

n=size(cmap,1);

i= (val-cax(1))/diff(cax) * (n-1) +1;

a=i-floor(i);

i=floor(i);

i=min(i,n);

i=max(i,1);

if i==n

cor=cmap(n,:);

elseif i==1

cor=cmap(1,:);

else

cor=cmap(i,:)*(1-a) + cmap(i+1,:)*a;

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值