Matlab - Scatter绘制具有不同颜色的多个classess

时间:2018-04-19 04:45:35

标签: matlab visualization

假设我有一个 1000x2 数据集及其相应的 1000x1 标签。

我们可以将数据分成10个类(标签数组有10个唯一值,范围从1到10)。

在Matlab中用10种不同颜色可视化这10个类的最短方法是什么?

我目前只使用两个类手动完成:

class_1 = data(labels == 1,:);
class_2 = data(labels == 2,:);
plot(class_1(:,1),class_1(:,2),'*');
hold on;
plot(class_2(:,1),class_2(:,2),'o');

任何指针都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

如果没有为每个类定义颜色,MATLAB将自动更改每个新绘图的颜色,但默认情况下只定义了7种颜色,因此对于10个绘图的情况,某些类将具有相同的颜色。

解决问题的一种方法是在单元格数组中定义颜色和标记,然后在循环中进行绘图。以下是class_1为蓝色星球和class_2绿色圆圈的示例:

classes = {class_1, class_2};
my_colors = {[0 0 1], [0 1 0]}; 
my_markers = {'*','o'};
figure(1), hold on
for i=1:length(classes)
    plot(classes{i}(:,1),classes{i}(:,2),'Color', my_colors{i}, 'Marker', my_markers{i});
end

这可以很容易地扩展到所有10个类,并且您可以轻松地更改每个类的颜色和标记。

您可以做的另一件事是更改MATLAB的默认颜色数,如果您不喜欢它们,您还可以更改默认颜色。您可以在此处阅读:Why Are Plot Lines Different Colors?

答案 1 :(得分:0)

根据所使用的colourmap(内置的colourmap' jet'可能最适用于此目的,但您也可以create your own),您只需使用labels向量作为输入scatter函数的颜色。这将自动将该矢量中的值范围映射到使用的整个色彩映射。

scatter(data(:,1),data(:,2),[],labels)

(如果您想要更改默认标记大小,请将[]更改为数字