首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从3D Matrix生成3D散点图- Matlab

从3D Matrix生成3D散点图- Matlab
EN

Stack Overflow用户
提问于 2018-07-12 19:28:37
回答 2查看 1.3K关注 0票数 0

我给出了一个300x300x300的矩阵。

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

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

代码语言:javascript
复制
matrix(x-val, y-val, z-val)

我想创建一个3D散点图,图中点的颜色会根据矩阵中的点的值发生变化。所有值均为>=0

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

EN

回答 2

Stack Overflow用户

发布于 2018-07-12 19:42:25

MathWorks有一个a page,它总结了MATLAB绘图的类型。我在很多场合都引用过它。你要找的函数是scatter3(X,Y,Z,S,C)。在function's example中走走,它应该会帮到你。

票数 0
EN

Stack Overflow用户

发布于 2018-07-12 20:01:45

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

代码语言:javascript
复制
x = matrix(:,:,1);
y = matrix(:,:,2);
z = matrix(:,:,3);

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

代码语言:javascript
复制
m = reshape(matrix, numel(matrix(:,:,1), 3);
n = size(m,1);

您的矩阵现在排列为n乘3矩阵,第1、2和3列分别表示x轴、y轴和z轴,即:

代码语言:javascript
复制
m = [ x1 y1 z1]
    [ x2 y2 z2]
    [   ...   ]
    [ xn yn zn]

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

代码语言:javascript
复制
scatter3(m(:,1), m(:,2), m(:,3))

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

代码语言:javascript
复制
myc = jet(n);

你也可以创建你自己的色彩映射ofc。颜色矩阵中的元素只是归一化的RGB值。

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

代码语言:javascript
复制
weighting = myWeightingLogic(m);

weighting将是一个n乘1的向量,如果它还不是,那么它应该被标准化。

代码语言:javascript
复制
weighting = weighting/max(weighting);

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

代码语言:javascript
复制
scatter3(m(:,1), m(:,2), m(:,3)), [], myc(round(weighting*n),:));

完整的代码:

代码语言:javascript
复制
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),:));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51304501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档