如何标记积分?

时间:2017-03-21 10:13:33

标签: matlab matrix label points

我尝试标记70个点(可以看作是节点),其坐标包含在具有两列的矩阵中。在标注中我的意思是适合每一个数字,例如获得一个有三列的矩阵,其中前两个总是坐标,第三个是标签

我在文档labelnodegraph中看到过,但我没有正确版本的matlab用于这些功能(我使用R2015a)。 labelmatrixbwlabel将我的坐标矩阵转换为1的矩阵。

我该怎么办?

317 948
319 935
320 969
320 969
326 916

2 个答案:

答案 0 :(得分:1)

我不确定我的问题是否正确。根据我的理解,您只需在数据中添加一列唯一编号即可。如果我们说您的数据存储在矩阵X中,您可以执行以下操作:

labels = 1:size(X,1); % generate a vector of integers from 1 to number of rows of X
X = [X, labels']; % concatenate the matrix X and the vector of labels

% X = [ 317 948 1
%       319 935 2
%       320 969 3
%       320 969 4
%       326 916 5
%       .........]

如果您想要具有相同坐标的点的相同的标签,则可以使用unique生成这些标签:

[~, ~, labels] = unique(X, 'rows');
X = [X, labels];


% X = [ 317 948 1
%       319 935 2
%       320 969 3
%       320 969 3
%       326 916 4
%       .........]

答案 1 :(得分:1)

有很多方法可以做到这一点。

  1. 只需使用带数字标签的数字数组即可。您可以轻松地将其附加到现有表格。

    arr(:,3) = labels;
    
  2. 您可以使用单元格数组,1和2将是数字,3则是标签的字符串。

    arrWL = cell(size(arr,1), 3);
    arrWL{:,1:2} = arr;
    arrWL{:,3} = labels;
    
  3. 您还可以使用table标记行和列。

    X = arr(:,1);
    Y = arr(:,2);
    arrWL = table(X, Y, 'RowNames', labels);
    
  4. 将数据和标签作为单独的条目放在一个单元格数组中(包含2个元素)。

    arrWL = {arr, labels};
    
  5. 如果这些选项都不合适,我可能会想到其他一些选择。

    现在,要为标签生成唯一编号,请使用:

    [~,~,positions] = unique(arr, 'rows', 'stable'); 
    % I prefer stable so the first point gets index 1 etc.