在MATLAB中定义scatter3颜色

3
有没有办法控制scatter3中的颜色?
在我的聚类问题中,我有两个向量A = 80x3包含我的数据和index包含聚类的索引。例如,数据点A(i,1) A(i,2) A(i,3)属于聚类index(i)
使用scatter3(A(:,1),A(:,2),A(:,3),50,index','filled')根据它们的聚类绘制所有数据点,但我想为每组点指定颜色。
我尝试过帮助文档,但我没能成功。

看看这个答案,或许能帮你入门。 - Schorsch
1个回答

4
你已经接近成功了。 scatter3 提供了几个选项来定义颜色方案(请参见此处的文档here)。其中一个选项是使用标量进行索引,就像你现在所做的那样。在这种情况下,着色方案是自动的。另一个选项是使用表示RGB颜色的三元组值。
例如,对于三种颜色,您可以定义自定义色图cmap
color_1 = [1 0.2 0.4];
color_2 = [0.34 0.65 0.87];
color_3 = [0.5 0.5 0.5];

cmap = [color_1; color_2; color_3];

然后根据您实际的索引创建一个INDEX_color(Nx3)矩阵。

INDEX_color = cmap(INDEX,:);

如果需要更多的分组,您可以基于内置的颜色映射自动创建INDEX_color。使用cmap = colormap(jet(10));将生成一个10x3的RGB矩阵,遵循jet颜色映射。

下图所示:

enter image description here

由以下代码给出:

A = [rand(20,3); rand(20,3)+1; rand(20,3)+2 ];
INDEX = [ones(20,1); ones(20,1)+1; ones(20,1)+2 ];

color_1 = [1 0.2 0.4];
color_2 = [0.34 0.65 0.87];
color_3 = [0.5 0.5 0.5];

cmap = [color_1; color_2; color_3];

INDEX_color = cmap(INDEX,:);

scatter3(A(:,1), A(:,2), A(:,3), 50, INDEX_color, 'filled')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接