芝麻开门分享 http://blog.sciencenet.cn/u/opensesame 周锋,研究员

博文

画风的矢量图时如何保持x, y轴的合适比例,同时又使图适合看

已有 8362 次阅读 2014-6-5 23:13 |个人分类:软件技巧|系统分类:科研笔记| MATLAB, wind, Data, feather, ratio

  假设有东海平均(120-130E,24-33N)风速某年的时间序列资料为1年,u_t, v_t。一般u_t, v_t的范围分别不超过[-12 12]

1)作图时,容易犯的第一个毛病,就是忽视了xy轴的比例,导致风速矢量的方向看上去不对,譬如:

figure

set(gcf, 'PaperUnits', 'inches');

set(gcf, 'Renderer', 'painters');   % fixmatlab datetick bug in opengl

set(gcf, 'paperposition',[0.4 0.45.0 2.2]);

new_axis = axes('position',[0.10 0.11 0.870.86]);

hwvec = feather(u_t, v_t,'k-');

for i =1:length(hwvec)-1 %the lastline on the axes

 xData = get(hwvec(i),'XData');

 yData = get(hwvec(i),'YData');

 set(hwvec(i),'XData',xData(1:2),'YData',yData(1:2))

end

axis([ 0 365 -12 12])

set(gca,'YTick',[-12:4.0: 12]);

ylabel('Wind (m/s)');


1 xy轴比例失当,导致风速矢量看上去方向不合理

正常情况下,东海平均风场应常见偏南风、东南风、西南风、东北风或者西北风,而上图显示基本是正南风和正北风。不是数据有问题,而是数据展示的时候有问题,原因是坐标轴的比例不当。因为feather画图是,自动把xy的输入都当做一个单位,然后按比例。譬如风速的范围(也就是y轴范围基本是-1212),而时间范围为1365天。相对而言,沿x轴方向的风速东分量就看不出来。

2)解决的方法是加上一个比例,固定xy轴的比例为1:1。两种方法

Axis equal; %然后

Axis tight

或者

daspect([1 1 1]);

此时的作图结果为:

   

          图2风速矢量图形的坐标轴比例合理了,但是图形没法看了,因为y轴被明显压扁了

2的做法比(1)合理,至少风的方向显示符合我们的常识了。譬如250-300天之间的东北风就比1更合理。然而,2的结果显然无法放在论文中,因为看不清楚。

3)解决方法是在放大y轴的数据,比例系数自己选择

 


3方法y轴比例,把u, v各放大5倍后的矢量图

ratio        = 5;        % 比例尺

y_range_orig = [-12 12]; %原始比例

y_range      = ratio*y_range_orig;   %新比例

figure

set(gcf, 'PaperUnits', 'inches');

set(gcf, 'Renderer', 'painters');   % fixmatlab datetick bug in opengl

set(gcf, 'paperposition',[0.4 0.45.0 2.2]);

new_axis = axes('position',[0.10 0.11 0.870.86]);

 

hwvec = feather(ratio*u_t,ratio*v_t,'k-');

set(hwvec,'clip','off'); % 图形在坐标轴之上

daspect([1 1 1]);

for i =1:length(hwvec)-1 %the lastline on the axes

 xData = get(hwvec(i),'XData');

 yData = get(hwvec(i),'YData');

 set(hwvec(i),'XData',xData(1:2),'YData',yData(1:2))

end%for

 

axis([ 0 365 y_range(1)y_range(2)])

htext    = text(13,10,'(B)');

set(gca,'YTick',[y_range(1):4.0*ratio:y_range(2)],...

'YTicklabel',[y_range_orig(1):4.0:y_range_orig(2)]);

set(gca,'box','on','fontsize',8);

ylabel('Wind (m/s)');

 

结果合理了。

 

3也可以用d:DocumentsCrossShelfFiguregraphicstimeplt.m来画。画图函数timeplt.m,该数据包来自:http://woodshole.er.usgs.gov/operations/sea-mat/timeplt-html/

 

结果如下:


                             图4. timeplt作的风速分量和矢量图



Happy programming!




https://blog.sciencenet.cn/blog-113657-800805.html

上一篇:Matlab变量编辑器中的矩阵元素闪烁,菜单无法使用
下一篇:大数据时代偷窃个人信息有无底线?
收藏 IP: 141.114.19.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 19:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部