如何标记点?

How to label points?

我尝试标记 70 个点(可以看作节点),这些点的坐标包含在一个有两列的矩阵中。在 labelize 中,我的意思是为每个人分配一个数字,例如获得一个包含三列的矩阵,其中前两列始终是坐标,第三列始终是标签

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

我该怎么办?

317 948
319 935
320 969
320 969
326 916

我不完全确定我是否解决了你的问题。据我了解,您只需在数据中添加一列唯一数字即可。如果我们说你的数据存储在矩阵 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. 只需使用带有数字标签的数字数组。您可以轻松地将其附加到现有的 table.

    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};
    

如果其中 none 是 suitable,我可能会想到一些其他的选择。

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

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