利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。
参考书目:《MATLAB基础教程 (第三版) (薛山)》
之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。
在本章中的代码,会以资源的形式发在我的博客里供大家免费下载学习。
特殊图形绘制(2)
1 直方图
MATLAB中有两个函数可以绘制直方图:histogram和rose,分别运用于直角坐标系和极坐标系中绘制直方图。hist函数的应用更为广泛一些,这里也是基于hist函数介绍。
(1)n = histogram(Y),绘制Y的直方图。
(2)n = histogram(Y,x),指定直方图的每个分格。其中,x为向量。绘制直方图时,以x的每个元为中心创建分格。
(3)n = histogram(Y,nbins)指定分格的数目。
例:
Matlab
x=randn(1000,1);
subplot(1,3,1),histogram(x),title('default histogram')
subplot(1,3,2),histogram(x,20),title('bin=20')
x_axis = [-3:0 5:-2];
subplot(1,3,3),histogram(x,x_axis),title('x_label ')
2 方向矢量图和速度矢量图
MATLAB可以绘制方向天量图和速度天量图。本节介绍方向天量图和速度矢量图的绘制。用于绘制方向天量图和速度矢量图的函数如下表所示:
|---------|-------------------------------|
| 函数 | 功能 |
| compass | 罗盘图,绘制极坐标图形中的向量 |
| feather | 羽状图,绘制向量,向量起点位于与x轴平行的直线上,长度相等 |
| quiver | 二维矢量图,绘制二维空间中指定点的方向矢量 |
| quiver3 | 三维矢量图,绘制三维空间中指定点的方向矢量 |
矢量由一个或者两个参数指定,指定矢量相对于原点的x分量和y分量。如果输入一个参数,就将输入视为复数,复数的实部为x分量,虚部为y分量;如果输入两个参数,则两个参数分别为向量的x分量和y分量。
2.1 罗盘图
罗盘图由函数compass绘制,MATLAB 的官方调用格式如下:
例:风向标的绘制
Matlab
wdir=[45 90 90 45 360 335 360 270 335 270 335 335];%初始化风向,用角度表示
knots=[6 6 8 6 3 9 6 8 9 10 14 12];%初始化风力
rdir = wdir * pi/180;%将角度转换为氢度
[x,y]=pol2cart(rdir,knots);%将极坐标转换为笛卡尔坐标
compass(x,y)
2.2 羽状图的绘制
羽状图由函数feather绘制,该函数的官方调用格式为:
例:在图形中显示角的方向
Matlab
theta=(-90:10:90)*pi/180;
r=2*ones(size(theta));
[u,v]= pol2cart(theta,r);
feather(u,v);
2.3 矢量图的绘制
MATLAB中可以绘制二维量和三维矢量图。矢量图在空间中的指定点绘制关量。用于绘制二维矢量图和三维矢量图的函数分别为quiver和quiver3。这两个函数的调用格式基本相同。下面仅以二维矢量图为例,介绍关量图的绘制。函数quiver的官方调用格式如下:
下面是几个官方给的例子:
1 加载表示北美上空气流的采样数据。对于此示例,选择该数据的子集。
Matlab
load('wind','x','y','u','v')
X = x(11:22,11:22,1);
Y = y(11:22,11:22,1);
U = u(11:22,11:22,1);
V = v(11:22,11:22,1);
%创建所选子集的箭头图。...
...向量 X 和 Y 表示每个箭头的起始点位置,
... U 和 V 表示每个箭头的定向分量。默认情况下,
...quiver 函数会缩短箭头,使其不重叠。
...调用 axis equal 以沿每个轴使用相等的数据单位长度。
...这会使箭头指向正确的方向。
quiver(X,Y,U,V)
axis equal
2 指定箭头图的坐标区
Matlab
%创建一个由 X 和 Y 值以及两组 U 和 V 定向分量组成的网格。
[X,Y] = meshgrid(0:pi/8:pi,-pi:pi/8:pi);
U1 = sin(X);
V1 = cos(Y);
U2 = sin(Y);
V2 = cos(X);
%创建一个具有两个坐标区 ax1 和 ax2 的分块布局图。想每个坐标区添加一个箭头图和标题。(在 R2019b 之前,使用 subplot 而不是 tiledlayout 和 nexttile。)
tiledlayout(1,2)
ax1 = nexttile;
quiver(ax1,X,Y,U1,V1)
axis equal
title(ax1,'Left Plot')
ax2 = nexttile;
quiver(ax2,X,Y,U2,V2)
axis equal
title(ax2,'Right Plot')
3 等值线
等值线在实际中应用广泛,如地形图、气压图等。本节介绍等值线的绘制。MATLAB提供了一些函数用于绘制等值线。这些函数及其功能如下表所示:
|----------|-------------------------|
| 函数 | 功能 |
| clabel | 在二维等值线中添加高度值 |
| contour | 绘制指定数据的二维等值线 |
| contour3 | 绘制指定数据的三维等值线 |
| contourf | 绘制二维等值线,并用颜色填充各等值线之间的区域 |
| contourc | 用于计算等值线矩阵,通常由其他函数调用 |
| meshc | 绘制二维等值线对应的网格图 |
| surfc | 绘制二维等值线对应的表面图 |
这里只介绍最常用的等值线函数contour,其他函数如果读者感兴趣可以查询使用。
关于contour函数的官方调用格式如下:
例:
Matlab
n=-2.0:.2:2.0;
[X,Y ,Z]= peaks(n);
contour(X,Y,Z,10);
hold on
[U,V]= gradient(Z,.2);
quiver(X,Y,U,V)