从3D矩阵生成3D散点图-Matlab

时间:2018-07-12 11:28:37

标签: matlab

我给出了300x300x300矩阵。

第一个下标代表x值,第二个下标代表y值,第三个下标代表z值。

要访问矩阵中特定点的值,请使用:

"dependencies": {
"@angular/animations": "^5.2.0",
"@angular/common": "^5.2.0",
"@angular/compiler": "^5.2.0",
"@angular/core": "^5.2.0",
"@angular/forms": "^5.2.0",
"@angular/http": "^5.2.0",
"@angular/platform-browser": "^5.2.0",
"@angular/platform-browser-dynamic": "^5.2.0",
"@angular/router": "^5.2.0",
"angular-in-memory-web-api": "~0.6.0",
"core-js": "^2.4.1",
"ngx-toastr": "^8.8.0",
"rxjs": "^5.5.6",
"systemjs": "0.19.40",
"zone.js": "^0.8.19"
  },

我想创建一个3D散点图,其中点图的颜色根据矩阵中点的值而变化。所有值为matrix(x-val, y-val, z-val)

由于我是Matlab的新手,所以我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

MathWorks的a page总结了MATLAB图形的类型。我已经多次引用了它。您正在寻找的功能是scatter3(X,Y,Z,S,C)。逐步完成function's example,它应该会对您有所帮助。

答案 1 :(得分:0)

我不确定如何为3-D点云提供300x300x300矩阵。我假设您有一个300x300x3的矩阵,即:

x = matrix(:,:,1);
y = matrix(:,:,2);
z = matrix(:,:,3);

首先,您可能希望将点重新排列为2D矩阵:

m = reshape(matrix, numel(matrix(:,:,1), 3);
n = size(m,1);

您的矩阵现在布置为n×3矩阵,第1、2和3列分别代表x,y和z轴,即:

m = [ x1 y1 z1]
    [ x2 y2 z2]
    [   ...   ]
    [ xn yn zn]

然后您可以创建基本的3D scatter plot

scatter3(m(:,1), m(:,2), m(:,3))

但是,这不是您想要的,因为点的颜色相同。要根据您的着色逻辑添加颜色,您首先应该使用MATLAB内置的color maps之一创建颜色矩阵。在这里,我使用jet

myc = jet(n);

您还可以创建自己的颜色图ofc。颜色矩阵中的元素只是简单的标准化rgb值。

现在,您将必须使用自己的逻辑对每个点进行加权:

weighting = myWeightingLogic(m);

weighting将是n×1向量,如果尚未标准化,则应将其标准化。

weighting = weighting/max(weighting);

现在您可以为散点图着色:

scatter3(m(:,1), m(:,2), m(:,3)), [], myc(round(weighting*n),:));

完整代码:

m = reshape(matrix, numel(matrix(:,:,1), 3);
n = size(m,1);
myc = jet(n);
weighting = myWeightingLogic(m);
weighting = weighting/max(weighting);
scatter3(m(:,1), m(:,2), m(:,3)), [], myc(round(weighting*n),:));