我有一个三维散点图,并希望将2d点显示在3个平面(x,y),(x,z)和(y,z)上,就像它们是投影的3d数据的阴影一样在飞机上。左图是一个例子:
这可以在R或Matlab中实现吗?我已经搜索了可以执行此操作但尚未成功的代码。
答案 0 :(得分:4)
是的,对于任何3D点
P = [x y z]
你可以通过创建3个新点来创建3个阴影
p1 = [0 y z]
p2 = [x 0 z]
p3 = [x y 0]
所以,在MATLAB中,如果你有一个点云,
P_cloud = [...
x1 y1 z1
x2 y2 z2
x3 y3 z3
...
];
只是剧情
P_cloud_YZ = [...
0 y1 z1
0 y2 z2
0 y3 z3
...
];
P_cloud_XZ = [...
x1 0 z1
x2 0 z2
x3 0 z3
...
];
P_cloud_XY = [...
x1 y1 0
x2 y2 0
x3 y3 0
...
];
或者,当然,重复使用相同的数据
[P_cloud(:, [2 3]) zeros(size(P,1),1)]
[P_cloud(:, [1 3]) zeros(size(P,1),1)]
[P_cloud(:, [1 2]) zeros(size(P,1),1)]
答案 1 :(得分:3)
做完这样的事后:
figure
[X,Y,Z] = sphere(16);
x = [0.5*X(:); 0.75*X(:); X(:)];
y = [0.5*Y(:); 0.75*Y(:); Y(:)];
z = [0.5*Z(:); 0.75*Z(:); Z(:)];
scatter3(x,y,z)
你可以使用相同的数字并添加其他一些图:
hold on;
plot3(x,y,min(z)*ones(size(x)),'r+');
plot3(min(x)*ones(size(x)),y,z,'g+');
plot3(x,min(y)*ones(size(x)),z,'k+');