MATLAB quiver()和quiver3()函数:绘制箭头图(附带实例)
箭头图很像数学中的向量,即它的箭头方向表示向量的方向,箭头的长短表示向量的大小。
在 MATLAB 中,绘制箭头图的函数是 quiver() 和 quiver3(),前者绘制的是二维图形,后者绘制的是三维图形。它们的调用格式也十分相似,只是后者比前者多一个坐标参数,因此只介绍一下 quiver() 函数的调用格式及说明,如下表所示。
quiver() 与 quiver3() 这两个函数经常与其他的绘图函数配合使用。
【实例】绘制 z = xe^(-x^2-y^2) 上的法线方向向量。MATLAB 程序如下:

图 1 法向向量图
在 MATLAB 中,绘制箭头图的函数是 quiver() 和 quiver3(),前者绘制的是二维图形,后者绘制的是三维图形。它们的调用格式也十分相似,只是后者比前者多一个坐标参数,因此只介绍一下 quiver() 函数的调用格式及说明,如下表所示。
调用格式 | 说明 |
---|---|
quiver(U,V) | 其中 U、V 为 m×n 矩阵,该函数格式的功能为在 xy 平面等距点处绘制由 U 和 V 定义的向量 |
quiver(X,Y,U,V) | 若 X 为 n 维向量,Y 为 m 维向量,U、V 为 m×n 矩阵,则绘出由 X、Y 确定的每一个点处由 U 和 V 定义的向量 |
quiver(...,scale) | 自动对向量的长度进行处理,使之不会重叠。可以对 scale 进行取值。若 scale=2,则向量长度伸长 2 倍;若 scale=0,则如实绘出向量图 |
quiver(...,LineSpec) | 用 LineSpec 指定的线型、符号、颜色等绘制向量图 |
quiver(...,LineSpec,'filled') | 对用 LineSpec 指定的记号进行填充 |
quiver(...,'PropertyName',PropertyValue,...) | 为该函数创建的箭头图对象指定属性名称和属性值对组 |
quiver(ax,...) | 在 ax 指定的坐标区中绘制图形 |
h = quiver(...) | 返回每个向量图的句柄 |
quiver() 与 quiver3() 这两个函数经常与其他的绘图函数配合使用。
【实例】绘制 z = xe^(-x^2-y^2) 上的法线方向向量。MATLAB 程序如下:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> [X,Y] = meshgrid(-2:0.25:2,-1:0.2:1); % 通过向量定义二维网格数据X、Y >> Z = X.* exp(-X.^2 - Y.^2); % 通过网格数据X、Y定义函数表达式 Z,得到二维矩阵Z >> [U,V,W] = surfnorm(X,Y,Z); % 计算网格面坐标(X,Y,Z)处的向量分量(U,V,W) >> subplot(1,2,1), % 将视图分割为1×2的窗口,在第1个窗口中绘图 >> [DX,DY] = gradient(Z,.2,.2); % 计算Z矩阵2个维度上的二维数值梯度的x分量DX和y分量DY >> quiver(X,Y,DX,DY) % 根据二维坐标点(X,Y)与该坐标点的二维分量(DX,DY)绘制二维箭头图 >> title('二维法向向量图') % 为图形添加标题 % 在第2个窗口中绘图,根据三维坐标点(X,Y,Z)与该坐标点的三维分量(U,V,W)绘制三维箭头图 >> subplot(1,2,2),quiver3(X,Y,Z,U,V,W,0.5) >> hold on % 打开图形保持命令 >> surf(X,Y,Z) % 绘制由X、Y和Z指定的曲面 >> axis([-2 2 -1 1 -.6 .6]) % 定义三维X、Y、Z坐标轴的最大值和最小值,在该区域内显示图形 >> hold off % 关闭图形保持命令 >> title('三维法向向量图') % 为图形添加标题运行结果如下图所示:

图 1 法向向量图