MATLAB - 绘制向量
MATLAB - 可视化向量数据
Section titled “MATLAB - 可视化向量数据”在 MATLAB 中,“向量”是一个一维数组,一种基本数据结构。当我们谈论“绘制向量”时,可能指两种不同的含义:
- 绘制向量内部的数据:这涉及可视化存储在向量中的值的序列。
plot()、stem()和bar()等函数用于此目的。例如,绘制时间序列或一组测量值。 - 绘制作为箭头的几何向量:这涉及在坐标系中可视化特定点的方向和大小。这在物理学(例如,力场)和数学(例如,梯度场)中很常见。用于此目的的主要函数是
quiver()。
本教程侧重于第二种情况:使用 quiver 函数创建向量场图。
quiver 函数
Section titled “quiver 函数”quiver 函数绘制二维箭头来表示向量。其核心是,它需要每个箭头的起始坐标(X,Y)和向量分量(U,V)。
quiver(X, Y, U, V)quiver(U, V)quiver(___, scale)quiver(___, LineSpec)q = quiver(___)quiver(X, Y, U, V):在由X和Y的对应元素指定的坐标处绘制箭头。每个箭头的水平分量由U给出,垂直分量由V给出。quiver(U, V):如果省略X和Y,MATLAB 会在均匀间隔的网格上绘制向量。quiver(___, scale):控制箭头的长度。如果scale是一个正数,它作为乘数。如果scale是0(或'off'),它将禁用自动缩放,箭头的长度将直接由U和V决定。quiver(___, LineSpec):一个字符串,用于指定线条样式、标记和颜色(例如,'r--o'表示红色虚线带圆形标记)。q = quiver(___):返回一个Quiver对象。这个句柄(q)对于现代 MATLAB 至关重要,因为它允许您在创建绘图后自定义其属性。
示例 1:绘制几个单独的向量
Section titled “示例 1:绘制几个单独的向量”此示例绘制了从不同点开始的三个不同向量。
% 定义起始点 (X, Y)X = [1, 3, 4];Y = [2, 4, 1];
% 定义向量分量 (U, V)U = [2, -1, 0]; % 水平分量V = [1, 1, -2]; % 垂直分量
figure;hold on;grid on;axis equal; % 确保正确的纵横比
% 创建 quiver 绘图并存储句柄q = quiver(X, Y, U, V);
% 绘制起始点以便清晰plot(X, Y, 'ro', 'MarkerFaceColor', 'r');
% 使用句柄自定义绘图q.Color = 'blue';q.LineWidth = 2;q.AutoScaleFactor = 0.9; % 调整自动缩放
% 添加标签和标题xlabel('X-axis');ylabel('Y-axis');title('Plotting Individual Vectors');legend('Start Points', 'Vectors');hold off;预期输出: 一个绘图,其中有三个蓝色箭头从三个红点发出。axis equal 命令确保向量 [1, 1] 将以 45 度角显示。
示例 2:可视化向量场
Section titled “示例 2:可视化向量场”quiver 的一个更强大的用途是可视化向量场,例如函数的梯度。让我们绘制 $$f(x,y) = x^2 + y^2$$ 的场。
% 1. 创建点网格[X, Y] = meshgrid(-2:0.4:2, -2:0.4:2);
% 2. 定义向量场的分量。% 函数 f(x,y) = x^2 + y^2 的梯度为 ∇f = <2x, 2y>。U = 2 * X; % 水平分量V = 2 * Y; % 垂直分量
% 3. 创建绘图figure;q = quiver(X, Y, U, V);
% 4. 自定义外观axis tight;xlabel('x');ylabel('y');title('Vector Field of ∇f = <2x, 2y>');q.LineWidth = 1;q.Color = [0.2 0.2 0.2]; % 深灰色预期输出: 一个显示箭头网格的绘图,所有箭头均从原点 (0,0) 指向外侧,它们的长度随着离中心越来越远而增加。这正确可视化了梯度场。
示例 3:控制缩放和样式
Section titled “示例 3:控制缩放和样式”此示例展示了如何禁用自动缩放以表示真实的向量大小,并应用 LineSpec。
[X, Y] = meshgrid(0:2, 0:2);U = ones(3, 3);V = ones(3, 3);
figure;
% 子图 1:自动缩放(默认)subplot(1, 2, 1);quiver(X, Y, U, V);title('Default Auto-Scaling');axis([-1 3 -1 3]);
% 子图 2:缩放关闭subplot(1, 2, 2);% '0' 关闭缩放。'r' 使向量变为红色。quiver(X, Y, U, V, 0, 'r');title('Scaling Off (True Magnitude)');axis([-1 3 -1 3]);预期输出: 两个子图。左图的箭头大小适中且不重叠。右图有更长的红色箭头,因为它们的长度现在直接由向量的大小(模,即 sqrt(1^2 + 1^2) ≈ 1.414)决定。
最佳实践与常见陷阱
Section titled “最佳实践与常见陷阱”- 维度不匹配:最常见的错误是矩阵
X、Y、U和V的大小不一致。在调用quiver之前,务必仔细检查它们的维度。 - 场绘图使用
meshgrid:绘制向量场时,务必使用meshgrid生成坐标网格,以确保X和Y为基于向量的计算正确格式化。 - 利用对象句柄:对于复杂的绘图,始终将
quiver的输出存储在句柄中(q = quiver(...))。这允许在创建绘图后对数十种属性(颜色、线宽、箭头样式等)进行细粒度控制。 axis equal是您的好帮手:对于几何或基于物理的向量图,请使用axis equal或daspect([1 1 1])以确保向量角度和相对大小(模)的正确空间表示。