目录
quiver函数的功能是绘制箭头图或向量图。
语法
quiver(X,Y,U,V)quiver(U,V)quiver(___,scale)quiver(___,LineSpec)quiver(___,LineSpec,'filled')quiver(___,Name,Value)quiver(ax,___)q = quiver(___)
说明
quiver(X,Y,U,V) 在由 X 和 Y 指定的笛卡尔坐标上绘制具有定向分量 U 和 V 的箭头。例如,第一个箭头源于点 X(1) 和 Y(1),按 U(1) 水平延伸,按 V(1) 垂直延伸。默认情况下,quiver 函数缩放箭头长度,使其不重叠。
quiver(U,V) 在等距点上绘制箭头,箭头的定向分量由 U 和 V 指定。
-
如果 U 和 V 是向量,则箭头的 x 坐标范围是从 1 到 U 和 V 中的元素数,并且 y 坐标均为 1。
-
如果 U 和 V 是矩阵,则箭头的 x 坐标范围是从 1 到 U 和 V 中的列数,箭头的 y 坐标范围是从 1 到 U 和 V 中的行数。
quiver(___,scale) 调整箭头的长度:
-
当 scale 为正数时,quiver 函数会自动调整箭头的长度,使其不重叠,然后将箭头长度拉伸 scale 倍。例如,scale 为 2 会使箭头长度加倍,scale 为 0.5 会使箭头长度减半。
-
当 scale 为 'off' 或 0 时,如 quiver(X,Y,U,V,'off'),则禁用自动缩放。
quiver(___,LineSpec) 设置线型、标记和颜色。标记出现在由 X 和 Y 指定的点上。如果使用 LineSpec 指定标记,则 quiver 不显示箭尖。要指定标记并显示箭尖,请改为设置 Marker 属性。
quiver(___,LineSpec,'filled') 填充由 LineSpec 指定的标记。
quiver(___,Name,Value) 使用一个或多个名称-值对组参数指定箭头图属性。有关属性列表,请参阅 Quiver 属性。在所有其他输入参数之后指定名称-值对组参数。名称-值对组参数应用于箭头图中的所有箭头。
quiver(ax,___) 在 ax 指定的坐标区中而不是当前坐标区 (gca) 中创建箭头图。参数 ax 可以置于前面的语法中的任何输入参数组合之前。
q = quiver(___) 返回 Quiver 对象。此对象对于在创建箭头图后控制其属性非常有用。
示例
创建箭头图
加载表示北美上空气流的采样数据。对于此示例,选择该数据的子集。
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
如图所示:
禁用自动缩放
默认情况下,quiver 函数会缩短箭头长度,使其不重叠。将 scale 参数设置为 0 可禁用自动缩放,从而完全由 U 和 V 来确定箭头长度。
例如,使用 meshgrid 函数创建一个由 X 和 Y 值组成的网格。使用这些值指定定向分量。然后,创建一个没有自动缩放的箭头图。
[X,Y] = meshgrid(0:6,0:6);U = 0.25*X;V = 0.5*Y;quiver(X,Y,U,V,0)
如图所示:
绘制梯度和等高线
绘制函数 z=xe−x2−y2 的梯度和等高线。使用 quiver 函数绘制梯度,使用 contour 函数绘制等高线。
首先,创建一个由等间距的 x 和 y 值组成的网格。使用它们来计算 z。然后,通过指定点之间的间距,求得 z 的梯度。
spacing = 0.2;[X,Y] = meshgrid(-2:spacing:2);Z = X.*exp(-X.^2 - Y.^2);[DX,DY] = gradient(Z,spacing);
将梯度向量显示为一个箭头图。然后,在相同的坐标区中显示等高线。通过调用 axis equal,调整显示以使梯度向量垂直于等高线。
quiver(X,Y,DX,DY)hold oncontour(X,Y,Z)axis equalhold off
如图所示:
指定箭头颜色
创建一个箭头图,并指定箭头的颜色。
[X,Y] = meshgrid(-pi:pi/8:pi,-pi:pi/8:pi);U = sin(Y);V = cos(X);quiver(X,Y,U,V,'r')
如图所示:
指定箭头图的坐标区
创建一个由 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 equaltitle(ax1,'Left Plot')ax2 = nexttile;quiver(ax2,X,Y,U2,V2)axis equaltitle(ax2,'Right Plot')
如图所示:
在创建后修改箭头图
创建一个箭头图并返回箭头图对象。然后,删除箭尖并在每个箭尖的起始点添加点标记。
[X,Y] = meshgrid(-pi:pi/8:pi,-pi:pi/8:pi);U = sin(Y);V = cos(X);q = quiver(X,Y,U,V);q.ShowArrowHead = 'off';q.Marker = '.';
如图所示:
X
— 箭头起始点的 x 坐标,Y
— 箭头起始点的 y 坐标,U
— x 分量,V
— y 分量,LineSpec
— 线型、标记和颜色,scale
— 箭头缩放因子,ax
— 目标坐标区。
提示
要使用极坐标创建箭头图,请首先使用 pol2cart 函数将其转换为笛卡尔坐标。