Matlab使用quiver函数绘制箭头矢量图

4.5
(4)

今天,开始讲解关于Matlab中绘制箭头图或者速度图矢量图的方法。Matlab提供了一个quiver函数,可以很轻松的将坐标点用箭头表示,很直观的表示其中的物理规律。本文主要讲解Matlab中quiver函数的常见用法,语法说明,绘制速度向量,以及显示箭头图的梯度等。

Matlab使用quiver函数绘制箭头矢量图

下面,我们首先给出Matlab中关于quiver函数的帮助文档如下:

>> help quiver
 quiver Quiver plot.
    quiver(X,Y,U,V) plots velocity vectors as arrows with components (u,v)
    at the points (x,y).  The matrices X,Y,U,V must all be the same size
    and contain corresponding position and velocity components (X and Y
    can also be vectors to specify a uniform grid).  quiver automatically
    scales the arrows to fit within the grid.
 
    quiver(U,V) plots velocity vectors at equally spaced points in
    the x-y plane.
 
    quiver(U,V,S) or quiver(X,Y,U,V,S) automatically scales the
    arrows to fit within the grid and then stretches them by S.  Use
    S=0 to plot the arrows without the automatic scaling.
 
    quiver(...,LINESPEC) uses the plot linestyle specified for
    the velocity vectors.  Any marker in LINESPEC is drawn at the base
    instead of an arrow on the tip.  Use a marker of '.' to specify
    no marker at all.  See PLOT for other possibilities.
 
    quiver(...,'filled') fills any markers specified.
 
    quiver(AX,...) plots into AX instead of GCA.
 
    H = quiver(...) returns a quivergroup handle.
 
    Example:
       [x,y] = meshgrid(-2:.2:2,-1:.15:1);
       z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15);
       contour(x,y,z), hold on
       quiver(x,y,px,py), hold off, axis image

常见用法

quiver(x,y,u,v)
quiver(u,v)
quiver(...,scale)
quiver(...,LineSpec)
quiver(...,LineSpec,'filled')
quiver(...,'PropertyName',PropertyValue,...)
quiver(ax,...)
h = quiver(...)

语法说明

箭头图将速度向量显示为箭头,其中分量 (u,v) 位于点 (x,y) 处。

例如,第一个向量由分量 u(1),v(1) 定义并显示在点 x(1),y(1) 处。

quiver(x,y,u,v) 在 x 和 y 中每个对应元素对组所指定的坐标处将向量绘制为箭头。矩阵 x、y、u 和 v 必须大小相同并包含对应的位置和速度分量。但是,如下节所述,x 和 y 还可以是向量。默认情况下,箭头缩放到刚好不重叠,但您可以根据需要将箭头缩放的长一些或短一些。

quiver(u,v) 在 xy 平面的等距点处绘制 u 和 v 指定的向量。

quiver(…,scale) 自动缩放箭头以适合网格大小,然后根据因子 scale 拉伸它们。scale = 2 使它们的相对长度加倍,scale = 0.5 使它们的相对长度减半。使用 scale = 0 绘制速度向量,不应用自动缩放。您还可以在绘制箭头后调整其长度,方法就是选择绘图编辑工具,再选择箭头图对象,然后打开属性编辑器并调整长度滑块。

quiver(…,LineSpec) 使用任何有效的 LineSpec 指定线型、标记符号和颜色。quiver 在向量原点处绘制标记。

quiver(…,LineSpec,’filled’) 填充 LineSpec 指定的标记。

quiver(…,’PropertyName’,PropertyValue,…) 为该函数创建的箭头图对象指定属性名称和属性值对组。

quiver(ax,…) 将图形绘制到 ax 坐标区中,而不是当前坐标区 (gca) 中。

h = quiver(…) 返回 Quiver 对象。

展开 x 和 y 坐标

如果 x 和 y 不是矩阵,MATLAB® 会将它们展开。该展开与调用 meshgrid 以基于向量生成矩阵等效:

[x,y] = meshgrid(x,y);
quiver(x,y,u,v)

在这种情况下,以下条件必须为满足:

length(x)=n 和 length(y) = m,其中 [m,n] = size(u) = size(v)。

向量 x 与 u 和 v 的列相对应,而向量 y 与 u 和 v 的行相对应。

绘制速度向量

使用 quiver 在 x 和 y 的每个数据点处显示箭头,这样箭头方向和长度分别由 u 和 v 中的相应值表示。

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

figure
quiver(x,y,u,v)
Matlab使用quiver函数绘制箭头矢量图

显示箭头图的梯度

绘制函数 z=xe−x^2−y^2 的梯度。

[X,Y] = meshgrid(-2:.2:2);
Z = X.*exp(-X.^2 - Y.^2);
[DX,DY] = gradient(Z,.2,.2);

figure
contour(X,Y,Z)
hold on
quiver(X,Y,DX,DY)
hold off
Matlab使用quiver函数绘制箭头矢量图

这里需要注意的是,文中代码中的meshgrid很关键,用于生成网格化数据,即生成x,y组成的平面区域网格数据。

共计4人评分,平均4.5

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/1524.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年01月23日 15:32
下一篇 2021年01月25日 20:13

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号