如何在Matlab的3D散点图中获取垂直线?

时间:2019-02-16 11:23:17

标签: matlab plot 3d matlab-figure

我有三个矩阵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')

2 个答案:

答案 0 :(得分:2)

您还可以使用内置函数stem,它就是这样做的。

一个小技巧是您不能以简写形式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 所指出的那样,使用stem3函数直接接受z数据更容易:

hp = stem3(x,y,z,'filled') ;

以上两个示例都将产生:

enter image description here

答案 1 :(得分:1)

正如@ {SardarUsama所指出的那样,plot3应该可以解决问题。代码可能会更紧凑,但为了清楚起见,请保留原样。

Vertical lines on 3d scatter plot

% 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