MATLAB quiver函数使用:绘制矢量箭头

介绍

在科研出图中,经常需要在底图上绘制流速图、受力图、磁场方向图等,而MATLAB正好拥有一个对应的quiver函数可以使用。本文以冰流速制图为例介绍quiver函数的使用和注意事项。

quiver()功能

语法1:quiver(x,y,u,v)
这是quiver最常用的命令形式,表示在(x,y)位置上绘制向量(u,v)。(x,y)为箭头的起始坐标,(u,v)为箭头的方向矢量,sqrt(uu+vv)为物理量的大小,arctan(v/u)为物理量的方向。

语法2:quiver(x,y,u,v,scale)
数值scale是指箭头的放大缩小比例。在默认情况下,quiver命令会自动调整箭头的大小,以保证箭头之间不重叠。例如,scale为2时,表示箭头放大2倍,以此类推。

语法3:quiver(x,y,u,v,scale,‘LineSpec’)
'LineSpec’表示绘制箭头的颜色、线型、 标志样式。例如’LineSpec’为’y’时,表示箭头显示为黄色。

注意1:quiver()对(x,y,u,v)的要求

quiver()要求(x,y,u,v)为同型矩阵,即x,y,u,v的行列数要相等,假设均为m行n列。(x,y)可以使用meshgrid()生成,例如要生成3行4列的矩阵索引,可以如下代码举例

// An highlighted block
[x,y] = meshgrid(1:4,1:3);
%x =
%     1     2     3     4
%     1     2     3     4
%     1     2     3     4
%y = 
%     1     1     1     1
%     2     2     2     2
%     3     3     3     3

可以看出,meshgird(1:n,1:m),第一个参数是列数,第二个参数是行数,结果中,x表示列数,y表示行数。这与MATLAB中的矩阵表示"先行后列"是相反的,因此在使用meshgrid()生成矩阵索引时需要注意调整行数和列数的位置

注意2:quiver()绘制箭头时所在的坐标系

quiver()绘制箭头所在的坐标系是常见的笛卡尔坐标系,如下图所示,x轴向右为正,y轴向上为正,因此这解释了【注意1】中为何x表示列数,y表示行数。
x轴向右为正,y轴向上为正
但是,考虑到矩阵格式的图像时,矩阵的左上角为(1,1),矩阵描述的坐标系是向右为正,向下为正。因此,(u,v)同样分别表示水平方向和垂直方向,注意v可能前面要加负号

举例

下图是用quiver(x,y,u,v)绘制的达尔克冰川流速图,这与冰流方向是不一致的。
达尔克冰川冰流速图
用quiver(x,y,u,-v)绘制箭头时,箭头沿水平轴镜像反转,显示是符合实际情况的。
在这里插入图片描述

总结

quiver()函数原本是用于笛卡尔坐标系中的,当用quiver()函数显示矩阵形式的矢量场时,需要考虑到矩阵索引大小和笛卡尔坐标之间的区别,做好(x,y)与(u,v)在含义和正负符号上的一致性,才能画出准确的矢量场图形。

代码及冰流速数据

链接:https://pan.baidu.com/s/1MPgeLzTnde7st3yHS7VnFA
提取码:4f5w
链接

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页