Matlab 在三维散点图上显示不同颜色的类别
与3个数值一起,数据包含分类值(0或1),并希望使用三维散点图显示数据。我尝试编写一个函数,从csv文件读取数据,并按以下方式创建散点图:Matlab 在三维散点图上显示不同颜色的类别,matlab,Matlab,与3个数值一起,数据包含分类值(0或1),并希望使用三维散点图显示数据。我尝试编写一个函数,从csv文件读取数据,并按以下方式创建散点图: function f = ScatterPlotUsers(filename) data = ReadCSV(filename); x = data(:,2); y = data(:,3); z = data(:,4); size = ones(length(x), 1)*20; userType = da
function f = ScatterPlotUsers(filename)
data = ReadCSV(filename);
x = data(:,2);
y = data(:,3);
z = data(:,4);
size = ones(length(x), 1)*20;
userType = data(:,5);
colors = zeros(length(x), 1);
a = find(userType == 1);
b = find(userType == 0);
colors(a,1) = 42; %# color for users type a
colors(b,1) = 2; %# color for users type b
scatter3(x(:),y(:),z(:),size, colors,'filled')
view(-60,60);
我实际上想做的是将a的颜色设置为红色,b的颜色设置为蓝色,但无论颜色值如何(示例中为42和2),点的颜色都不会改变。
是否有人知道确定几个分类值的特定颜色的正确方法(在本例中仅为0和1)?您做得对,但是,您确定colormap条目42和2指的是红色和蓝色吗?您可以尝试显式地给出RGB值:
colors = zeros(length(x), 3);
colors(userType == 1, :) = [1 0 0]; %# colour for users type a (red)
colors(userType == 2, :) = [0 0 1]; %# colour for users type b (blue)
另外,我建议您更改变量
size
的名称,因为size
也是一个Matlab命令;Matlab可能会对此感到困惑,您的代码的任何未来读者肯定会对此感到困惑。您做得对,但是,您确定colormap条目42和2指的是红色和蓝色吗?您可以尝试显式地给出RGB值:
colors = zeros(length(x), 3);
colors(userType == 1, :) = [1 0 0]; %# colour for users type a (red)
colors(userType == 2, :) = [0 0 1]; %# colour for users type b (blue)
另外,我建议您更改变量
size
的名称,因为size
也是一个Matlab命令;Matlab可能会对此感到困惑,您的代码的任何未来读者肯定会对此感到困惑。我会使用colormap,尤其是当您的用户类型
值从0开始并增加时:
% Read in x, y, z, and userType.
userType = userType + 1;
colormap(lines(max(userType)));
scatter3(x, y, z, 20, userType);
如果需要特定颜色,请用矩阵替换行(…)
。例如,如果您有3种用户类型,并且希望它们为红色、绿色和蓝色:
colormap([1, 0, 0;
0, 1, 0;
0, 0, 1]);
其他一些注意事项:
我们在userType
中添加一个,以从基于0的索引切换到基于1的索引
您可以为scatter3的
大小参数使用标量,而不是指定单个值的数组。我会使用colormap,尤其是当您的用户类型
值从0开始并增加时:
% Read in x, y, z, and userType.
userType = userType + 1;
colormap(lines(max(userType)));
scatter3(x, y, z, 20, userType);
如果需要特定颜色,请用矩阵替换行(…)
。例如,如果您有3种用户类型,并且希望它们为红色、绿色和蓝色:
colormap([1, 0, 0;
0, 1, 0;
0, 0, 1]);
其他一些注意事项:
我们在userType
中添加一个,以从基于0的索引切换到基于1的索引
您可以将标量用于scatter3的size
参数,而不是指定单个值的数组