今天,给各位系统的介绍下 Matlab 中使用 plot3 绘图中的常见方法,主要包括三维螺旋图、多个三维线条绘制、三维矩阵绘制三维图、指定等间距刻度单位和轴标签、将点绘制为不带线的标记、自定义颜色和标记、指定线型、在绘图后修改线条、指定目标坐标区、使用自定义刻度格式绘制持续时间数据、绘制线条并在一个数据点上放置标记等常见用法。
下面我们将开始非常详细的 Matlab plot3 函数语法介绍,实例引用,结果展示。首先,我们给出 Matlab 中关于 plot 函数的帮助文本如下:
>> help plot3
plot3 Plot lines and points in 3-D space.
plot3() is a three-dimensional analogue of PLOT().
plot3(x,y,z), where x, y and z are three vectors of the same length,
plots a line in 3-space through the points whose coordinates are the
elements of x, y and z.
plot3(X,Y,Z), where X, Y and Z are three matrices of the same size,
plots several lines obtained from the columns of X, Y and Z.
Various line types, plot symbols and colors may be obtained with
plot3(X,Y,Z,s) where s is a 1, 2 or 3 character string made from
the characters listed under the PLOT command.
plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...) combines the plots
defined by the (x,y,z,s) fourtuples, where the x's, y's and z's are
vectors or matrices and the s's are strings.
Example: A helix:
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);
plot3 returns a column vector of handles to lineseries objects, one
handle per line. The X,Y,Z triples, or X,Y,Z,S quads, can be
followed by parameter/value pairs to specify additional
properties of the lines.
常见语法
plot3(X,Y,Z)
plot3(X,Y,Z,LineSpec)
plot3(X1,Y1,Z1,...,Xn,Yn,Zn)
plot3(X1,Y1,Z1,LineSpec1,...,Xn,Yn,Zn,LineSpecn)
plot3(___,Name,Value)
plot3(ax,___)
p = plot3(___)
语法说明
plot3(X,Y,Z) 绘制三维空间中的坐标。
- 要绘制由线段连接的一组坐标,请将 X、Y、Z 指定为相同长度的向量。
- 要在同一组坐标轴上绘制多组坐标,请将 X、Y 或 Z 中的至少一个指定为矩阵,其他指定为向量。
plot3(X,Y,Z,LineSpec) 使用指定的线型、标记和颜色创建绘图。
plot3(X1,Y1,Z1,…,Xn,Yn,Zn) 在同一组坐标轴上绘制多组坐标。使用此语法作为将多组坐标指定为矩阵的替代方法。
plot3(X1,Y1,Z1,LineSpec1,…,Xn,Yn,Zn,LineSpecn) 可为每个 XYZ 三元组指定特定的线型、标记和颜色。您可以对某些三元组指定 LineSpec,而对其他三元组省略它。例如,plot3(X1,Y1,Z1,’o’,X2,Y2,Z2) 对第一个三元组指定标记,但没有对第二个三元组指定标记。
plot3(___,Name,Value) 使用一个或多个名称-值对组参数指定 Line 属性。
plot3(ax,___) 在目标坐标区上显示绘图。将坐标区指定为上述任一语法中的第一个参数。
p = plot3(___) 返回一个 Line 对象或 Line 对象数组。创建绘图后,使用 p 修改该绘图的属性。
三维螺旋图绘制
将 t 定义为由介于 0 和 10π 之间的值组成的向量。将 st 和 ct 定义为正弦和余弦值向量。然后绘制 st、ct 和 t。
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
plot3(st,ct,t)
多个线条绘制
创建两组 x、y 和 z 坐标。
t = 0:pi/500:pi;
xt1 = sin(t).*cos(10*t);
yt1 = sin(t).*sin(10*t);
zt1 = cos(t);
xt2 = sin(t).*cos(12*t);
yt2 = sin(t).*sin(12*t);
zt2 = cos(t);
调用 plot3 函数,并指定连续的 XYZ 三元组。
plot3(xt1,yt1,zt1,xt2,yt2,zt2)
使用矩阵绘制多个线条
创建包含三行 x 坐标的矩阵 X。创建包含三行 y 坐标的矩阵 Y。
t = 0:pi/500:pi;
X(1,:) = sin(t).*cos(10*t);
X(2,:) = sin(t).*cos(12*t);
X(3,:) = sin(t).*cos(20*t);
Y(1,:) = sin(t).*sin(10*t);
Y(2,:) = sin(t).*sin(12*t);
Y(3,:) = sin(t).*sin(20*t);
创建矩阵 Z,其中包含所有三组坐标的 z 坐标。
Z = cos(t);
在同一组坐标轴上绘制所有三组坐标。
plot3(X,Y,Z)
指定等间距刻度单位和轴标签
创建向量 xt、yt 和 zt。
t = 0:pi/500:40*pi;
xt = (3 + cos(sqrt(32)*t)).*cos(t);
yt = sin(sqrt(32) * t);
zt = (3 + cos(sqrt(32)*t)).*sin(t);
绘制数据,并使用 axis equal 命令沿每个轴等间距隔开刻度单位。然后为每个轴指定标签。
plot3(xt,yt,zt)
axis equal
xlabel('x(t)')
ylabel('y(t)')
zlabel('z(t)')
将点绘制为不带线的标记
创建向量 t、xt 和 yt,并使用圆形标记绘制这些向量中的点。
t = 0:pi/20:10*pi;
xt = sin(t);
yt = cos(t);
plot3(xt,yt,t,'o')
自定义颜色和标记
创建向量 t、xt 和 yt,并将这些向量中的点绘制为带 10 磅圆形标记的蓝线。使用十六进制颜色代码指定标记的填充颜色为浅蓝色。
t = 0:pi/20:10*pi;
xt = sin(t);
yt = cos(t);
plot3(xt,yt,t,'-o','Color','b','MarkerSize',10,'MarkerFaceColor','#D9FFFF')
Matalb无法使用自定义颜色值,我们需要把#D9FFFF改成black等颜色值。
指定线型
创建向量 t。然后使用 t 计算两组 x 和 y 值。
t = 0:pi/20:10*pi;
xt1 = sin(t);
yt1 = cos(t);
xt2 = sin(2*t);
yt2 = cos(2*t);
绘制这两组值。第一组使用默认线条,第二组使用虚线。
plot3(xt1,yt1,t,xt2,yt2,t,'--')
在绘图后修改线条
创建向量 t、xt 和 yt,并绘制这些向量中的数据。返回输出变量 p 中的图线条。
t = linspace(-10,10,1000);
xt = exp(-t./10).*sin(5*t);
yt = exp(-t./10).*cos(5*t);
p = plot3(xt,yt,t);
将线宽更改为 3。
p.LineWidth = 3;
指定目标坐标区
从 R2019b 开始,您可以使用 tiledlayout 和 nexttile 函数显示分块图。调用 tiledlayout 函数以创建 1×2 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1 和 ax2。通过将坐标区对象指定为 plot3 的第一个参数,在坐标区中创建单独的线图。
tiledlayout(1,2)
% Left plot
ax1 = nexttile;
t = 0:pi/20:10*pi;
xt1 = sin(t);
yt1 = cos(t);
plot3(ax1,xt1,yt1,t)
title(ax1,'Helix With 5 Turns')
% Right plot
ax2 = nexttile;
t = 0:pi/20:10*pi;
xt2 = sin(2*t);
yt2 = cos(2*t);
plot3(ax2,xt2,yt2,t)
title(ax2,'Helix With 10 Turns')
这一部分由于我还是2016版本的Matlab无法给出图片,可以参考官方的图片,文末会给出原文地址。
不过,我可以用subplot来实现这个功能:
% Left plot
subplot(1,2,1)
t = 0:pi/20:10*pi;
xt1 = sin(t);
yt1 = cos(t);
plot3(xt1,yt1,t)
title('Helix With 5 Turns')
% Right plot
subplot(1,2,2)
t = 0:pi/20:10*pi;
xt2 = sin(2*t);
yt2 = cos(2*t);
plot3(xt2,yt2,t)
title('Helix With 10 Turns')
使用自定义刻度格式绘制持续时间数据
创建 x 和 y 为由 0 和 1 之间的随机值组成的向量。创建 z 为由随机的持续时间值组成的向量。
x = rand(1,10);
y = rand(1,10);
z = duration(rand(10,1),randi(60,10,1),randi(60,10,1));
绘制 x、y 和 z,并将 z 轴的格式指定为分和秒。然后添加轴标签,并启用网格以使图框内的点更容易可视化。
plot3(x,y,z,'o','DurationTickFormat','mm:ss')
xlabel('X')
ylabel('Y')
zlabel('Duration')
grid on
Matlab2016中无 DurationTickFormat 这个功能
绘制线条并在一个数据点上放置标记
创建向量 xt、yt 和 zt。绘制这些值,使用 LineSpec 参数指定具有圆形标记的实线。指定 MarkerIndices 属性以在第 200 个数据点上放置一个标记。
t = 0:pi/500:pi;
xt(1,:) = sin(t).*cos(10.*t);
yt(1,:) = sin(t).*sin(10.*t);
zt = cos(t);
plot3(xt,yt,zt,'-o','MarkerIndices',200)
Matlab2016 中 Line 没有 MarkerIndices 的功能。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/439.html