Day20_0.1基础学习MATLAB学习小技巧总结(20)——MATLAB绘图篇(3)

利用空闲时间把碎片化的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)
相关推荐
记录成长java34 分钟前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山34 分钟前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
睡觉谁叫~~~38 分钟前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
音徽编程38 分钟前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
观音山保我别报错39 分钟前
C语言扫雷小游戏
c语言·开发语言·算法
dsywws1 小时前
Linux学习笔记之vim入门
linux·笔记·学习
小屁孩大帅-杨一凡2 小时前
java后端请求想接收多个对象入参的数据
java·开发语言
m0_656974742 小时前
C#中的集合类及其使用
开发语言·c#
java1234_小锋2 小时前
使用 RabbitMQ 有什么好处?
java·开发语言
晨曦_子画2 小时前
3种最难学习和最容易学习的 3 种编程语言
学习