如何在 matlab 的 3D 散点图中获取垂直线?
How to get vertical lines in a 3D scatter plot in matlab?
我有三个矩阵 x、y、z,它们是在 matlab 中通过 scatter3 绘制的。但是,我还需要从图表中的每个点下降的垂直线,以便更好地可视化。
使用matlab 2017a,在matlab中实现3D散点图
enter code here
clc;
figure
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
scatter3(x, y, z, 30, 'filled')
正如@SardarUsama 指出的那样,plot3
应该可以解决问题。代码可以更紧凑,但为了清晰起见,保持原样。
% MATLAB R2017a
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
figure
scatter3(x, y, z, 30, 'filled') % scatter plot (3D)
zRng = zlim;
hold on
for k = 1:length(x)
xL = [x(k) x(k)];
yL = [y(k) y(k)];
zL = [zRng(1) z(k)];
plot3(xL,yL,zL,'r-') % plot vertical line (3D)
end
您也可以使用内置函数 stem
,它就是这样做的。
小技巧是你不能以shorthand形式传递z
坐标stem(x,y,z)
,但图形对象仍然接受z
数据,你只需要将它们作为附加参数发送。
它的优点是您不需要循环 ;-)
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
hp = stem(x,y,'filled','ZData',z) ;
或者正如 Gnovice 很好地指出的那样,更容易使用直接接受 z
数据的 stem3
函数:
hp = stem3(x,y,z,'filled') ;
上面的两个例子都会产生:
我有三个矩阵 x、y、z,它们是在 matlab 中通过 scatter3 绘制的。但是,我还需要从图表中的每个点下降的垂直线,以便更好地可视化。
使用matlab 2017a,在matlab中实现3D散点图
enter code here
clc;
figure
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
scatter3(x, y, z, 30, 'filled')
正如@SardarUsama 指出的那样,plot3
应该可以解决问题。代码可以更紧凑,但为了清晰起见,保持原样。
% MATLAB R2017a
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
figure
scatter3(x, y, z, 30, 'filled') % scatter plot (3D)
zRng = zlim;
hold on
for k = 1:length(x)
xL = [x(k) x(k)];
yL = [y(k) y(k)];
zL = [zRng(1) z(k)];
plot3(xL,yL,zL,'r-') % plot vertical line (3D)
end
您也可以使用内置函数 stem
,它就是这样做的。
小技巧是你不能以shorthand形式传递z
坐标stem(x,y,z)
,但图形对象仍然接受z
数据,你只需要将它们作为附加参数发送。
它的优点是您不需要循环 ;-)
x = [0,0,0,0,0,10,10,10,10,10];
y = [0,10,20,30,40,-10,0,10,20,30];
z = [46,52,51,59,53,85,56,87,86,88];
hp = stem(x,y,'filled','ZData',z) ;
或者正如 Gnovice 很好地指出的那样,更容易使用直接接受 z
数据的 stem3
函数:
hp = stem3(x,y,z,'filled') ;
上面的两个例子都会产生: