Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在三维散点图上显示不同颜色的类别_Matlab - Fatal编程技术网

Matlab 在三维散点图上显示不同颜色的类别

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

与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 = 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
参数,而不是指定单个值的数组