根据功能值为三维空间中的点分配颜色

时间:2019-03-20 04:26:50

标签: matlab

我在想一个类似于this的问题。

我有一个函数,将x,y,z中的三个值R^3作为输入并返回1,2,3,4。现在,我想在坐标为{{1}的3D空间中绘制该点,其颜色与该点的功能值相关,该颜色可以是1,2,3或4之一。

我有一个3D矩阵,其中有整数条目,例如(x,y,z),并将点值存储在此矩阵中,以便可以绘制具有相应颜色的点(在MATLAB中类似“ image”命令的技巧, 2D图)。

颜色编码(例如)-

1-绿色,2-蓝色,3-青色,4-红色

就像如果在点1,2,3,4上返回值3,那么我在点(0.5,0.5,0.1)上标记了与数字三相关的颜色,即青色。

我正在考虑一个MATLAB命令,该命令在三维情况下可以执行此操作,因为“图像”命令似乎适用于2D情况。

2 个答案:

答案 0 :(得分:2)

我只能想到某种解决方法,例如:

% Input: A = coordinates, b = functional values.
A = rand(20, 3);
b = ceil(rand(20, 1) * 4);

% Color map.
cm = [0 1 0; 0 0 1; 0 1 1; 1 0 0];

% Circle size.
cs = 21;

% 3D scatter plot.
figure(1);
hold on;
for k = 1:size(cm, 1)
  idx = (b == k);
  scatter3(A(idx, 1), A(idx, 2), A(idx, 3), cs, cm(k, :), 'filled');
end
hold off;
view(45, 30);
grid on;

给出以下输出:

Output

答案 1 :(得分:2)

您可以线性化@HansHirse建议的解决方案,因此可能会有一个小的改进:

% Dummy data
A = rand(20, 3);
b = ceil(rand(20, 1) * 4);
% color vector
c = [0 1 0; 0 0 1; 0 1 1; 1 0 0];
% Use the linear indexing to select the right color
scatter3(A(:,1),A(:,2),A(:,3),[],c(b,:),"filled")

更简单的是,您可以仅使用b作为颜色输入,而matlab将使用默认的颜色图根据b设置颜色

scatter3(A(:,1),A(:,2),A(:,3),[],b,"filled")