Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将二维点添加到三维散点图_R_Matlab - Fatal编程技术网

R 如何将二维点添加到三维散点图

R 如何将二维点添加到三维散点图,r,matlab,R,Matlab,我有一个3d散点图,希望在3个平面(x,y)、(x,z)和(y,z)上显示2d点,就像它们是投影到平面上的3d数据的阴影一样。左图是一个示例: 这可以在R或Matlab中实现吗?我已经搜索了可以执行此操作的代码,但没有成功。是的,适用于任何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 y

我有一个3d散点图,希望在3个平面(x,y)、(x,z)和(y,z)上显示2d点,就像它们是投影到平面上的3d数据的阴影一样。左图是一个示例:

这可以在R或Matlab中实现吗?我已经搜索了可以执行此操作的代码,但没有成功。

是的,适用于任何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)]
是的,适用于任何三维点

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)]

这样做之后:

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+');

在做了这样的事情之后:

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+');

如果你发布一些数据代码,你可能会得到更多的关注。(这是一个编码站点。)在R pkg:lattice或甚至R base graphics中应该相当简单。按照DWin的建议,获取下面基于Matlab的答案中的信息,将代码移植到R,并使用
lattice
工具绘制点。记住,你的“阴影投影”点只是3D中的点,所有这些点都有一个轴的值设置为零(或最大值,取决于你要打印的面)。明白了,多简单。谢谢你的评论。如果你发布一些构建R代码的数据,你可能会得到更多的关注。(这是一个编码站点。)在R pkg:lattice或甚至R base graphics中应该相当简单。按照DWin的建议,获取下面基于Matlab的答案中的信息,将代码移植到R,并使用
lattice
工具绘制点。记住,你的“阴影投影”点只是3D中的点,所有这些点都有一个轴的值设置为零(或最大值,取决于你要打印的面)。明白了,多简单。谢谢你的评论。谢谢Rody的评论!谢谢Rody的评论!