代码之家  ›  专栏  ›  技术社区  ›  Forrest

Matlab-散点图不同颜色的多类

  •  1
  • Forrest  · 技术社区  · 6 年前

    比如说我有我有 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 回复  |  直到 6 年前
        1
  •  3
  •   Dan    6 年前

    如果没有为每个类定义颜色,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?

        2
  •  0
  •   etmuse    6 年前

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

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

    (更改 [] 如果要更改默认标记大小,请将其设置为数字)