Mike谈MATLAB图形

图形和数据可视化

请注意

Mike谈MATLAB图形已退役,不会更新。

当风吹起

当风吹起

美国国家海洋和大气管理局维护着一些收集天气数据的浮标,并发布这些数据他们的网站

波士顿港外就有四个这样的浮标。它们是地图上的红色方块。

例如,该地图底部的浮标44013的数据是可用的在这个网址

我下载了2015年的数据,可以这样读到MATLAB中:

t = readtable (“44013 c2015.txt”“格式”' % d % d % d % d % f % % % f % f % f '“HeaderLines”2);t.Properties.VariableNames = {“YY”“毫米”“弟弟”“hh”“毫米”“WDIR”“WSPD”“民主”“消费税”“GTIME”};

我们可以看到,该表中有52,460行。也就是全年每十分钟测量一次。

大小(t) t (3805:3810:)
10 = 52460岁= YY毫米DD hh毫米WDIR WSPD东德销售税GTIME  ____ __ __ __ __ ____ ____ ___ ____ _____ 2015 1 9 0 19 20.7 999 99 9999 2015 1 27 9 10 17 2015 999 99 9999 22.3 1 27 9 20 18 21.6 21.5 999 99 9999 2015 1 27 9 30 17 999 99 9999 2015 1 27 9 40 14 20.9 999 99 9999 2015 1 27 9 50 13 21.1 16 28.8 946

我将把日期信息转换为datetime,使它更容易处理。

时间戳= datetime (t.YY t.MM、t.DD t.hh, t.MM, 0);

现在我可以画出风向和风速使用新的polarplot在R2016a中引入的命令。注意,极谱图想要以弧度为单位的角度,但我们有角度。这意味着我们要用函数的功能

h = polarplot(函数(t.WDIR) t.WSPD);

这看起来很像旧的极地函数在MATLAB中已经有很多年了,但是有一些重要的区别。它创建了一个直线对象,但如果你仔细观察,你会发现它不太像你习惯的直线对象。注意,它有名为ThetaData和RData的属性,而不是XData和YData属性。当你使用旧的极坐标函数时,如果你想从直线对象中获取数据,你需要自己通过调用将它转换回和rcart2pol.在极谱图中,线对象会帮你解决这个问题。

h
h = Line with properties: Color: [0 0.4470 0.7410] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 MarkerFaceColor: 'none' ThetaData: [1x52460 double] RData: [1x52460 double] ZData: [1x0 double]使用GET显示所有属性

看看它创建的坐标轴。

甘氨胆酸ax =
RLim: [0 25] ThetaAxisUnits: 'degrees' ThetaDir: '逆时针' ThetaZeroLocation: 'right'使用GET显示所有属性

这是一个新的PolarAxes,它有一些很有用的性质。例如,由于风向在罗盘点上,我希望0是北,值按顺时针方向前进,值以度数显示。我可以通过设置这三个属性来实现。

斧子。ThetaAxisUnits =“度”;斧子。ThetaZeroLocation =“高级”;斧子。ThetaDir =“顺时针”

如果我们愿意,我们甚至可以切换到罗盘点:

ax.ThetaTick = 0:45:360;斧子。ThetaTickLabels = {“N”“不”“E”“本身”“年代”“西南”' W '“西北”“N”};
ax.ThetaTick = 0:22.5:360;斧子。ThetaTickLabels = {“N”“向”“不”“烯”“E”“ESE”“本身”上交所的“年代”“量”“西南”“西南偏西”' W '“WNW”“西北”“雅”“N”};

我可以定制ThetaAxis或axis,就像我习惯于在“常规”Axes对象上定制XAxis或YAxis一样。

斧子。RAxisLocation = 90;x. axis . color = [1/2 /2];ax.RAxis.Label.String =“风速”

但那张图真的不是很有用,不是吗?如果我们只看一天呢?我会选1月27日,因为那天有一场大风暴。

Mask = timestamp>=datetime(2015,1,27) & timestamp
           
           

你可以看到有20节的风从东北方向吹来。我们称之为a型风暴东北风在波士顿,他们通常是危险的。这次下了22英寸的雪。

21岁的文本(π/ 3 * 16“也不是“复活节”“字形大小”10“FontWeight”“大胆”“颜色”(3/8 3/8 3/8))

这是去年冬天一场破纪录的大雪的开始。接下来的几周是这样的。

持有D =datetime(2015,1,28)+days(1:13) mask = timestamp>= D & timestamp<(D +days(1));函数polarplot (t.WDIR(面具),t.WSPD(面具));结束

现在我想把情节做成动画,看一整年。我可以在循环中设置ThetaData和RData,但是我希望我的动画看起来更流畅一些。

为了使动画看起来流畅,我将每次画6天,并淡出旧的日子。我可以通过创建6个线条对象来实现渐隐效果。

cla m ='o';th = 0:π/ 2 *π;r = 1(大小(th));H = [(th,r,m), (th,r+1,m), (th,r+2,m),...polarplot (th, r + 3米),polarplot (th, r + 4米),polarplot (th, r + 5,米)];

现在,我将设置颜色,使它们在最老数据的白色和最新数据的蓝色之间淡出。

I =1:6 s = (I -1)/5;集(h(我),“颜色”hsv2rgb(.5661年代,1));结束

我将锁定RLim,这样情节就不会在动画过程中四处跳动。

斧子。RLim = [0, max(t.WSPD)];

现在我准备动画了。

每天,我将每个行对象的数据复制到下一个较旧的一个,然后添加新的一天的数据。

d = datetime(2015、1、1):datetime(2015、12、31)%将旧数据沿直线滚动i = 1:5 h (i)。.ThetaData ThetaData = h (i + 1);h (i)。.RData RData = h (i + 1);结束%添加当天的数据Mask = timestamp>=d & timestamp<(d+days(1));h(结束)。ThetaData =函数(t.WDIR(面具));h(结束)。RData = t.WSPD(面具);%更新标题标题(datestr (d))告诉图形系统绘制drawnow结束

我一直很喜欢新的极谱图功能,但我应该提到的是,并不是所有的图形命令都可以使用PolarAxes然而。目前,你基本上被限制在一行和文本中。如果你需要把其他东西放在你的极坐标图中,现存的极地pol2cart,cart2pol函数将一直存在,所以您可以继续使用老方法。

说到很酷的新功能在R2016a,一定要看看新的住编辑器.我把我最喜欢的一些博客文章上传到了File Exchange上,作为Live Scripts。这是一个链接所以你可以下载并试用它们。




发布与MATLAB®R2016a


  • 打印
  • 发送电子邮件