我在想一个类似于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情况。
答案 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;
给出以下输出:
答案 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")