今天,开始讲解关于Matlab中绘制箭头图或者速度图矢量图的方法。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) 在 x–y 平面的等距点处绘制 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)
显示箭头图的梯度
绘制函数 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
这里需要注意的是,文中代码中的meshgrid很关键,用于生成网格化数据,即生成x,y组成的平面区域网格数据。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/1524.html