在MATLAB中自定义树形图中的簇(叶)

时间:2014-07-03 00:13:00

标签: matlab

在树形图中标记叶子的一般方法显示为here

由于我有一个大型数据集,我想标记更高的集群而不是单个数据点。例如,如果一个集群有12个数据点,其中7个来自“Lable1”,我想将该集群标记为“Label1”。换句话说,我想绘制一个具有预定义簇的树:

LargeDataSet = [...]; % some m x n data matrix
dataLabel = [...]; % m x 1 vector labeling each row of LargeDataSet    
N = 10; % number of clusters I want
tree = linkage(LargeDataSet,'average'); 
LabelVector = ?; % I don't know how to create this vector 
dendrogram(tree,N,'Label',LabelVector);

基本上我想知道如何从“树”创建“LabelVector”,以便LabelVector中的每个标签都是“dataLabel”中的标签,该标签在该群集中最大或最多。

感谢您一直阅读!我知道这可能不是我问题的最佳描述。

1 个答案:

答案 0 :(得分:0)

好的我已经弄清楚了:

LargeDataSet = [...]; % some m x n data matrix
dataLabel = [...]; % m x 1 vector labeling each row of LargeDataSet    
N = 10; % number of clusters I want
tree = linkage(LargeDataSet,'average');     
[H,T,outperm]=dendrogram(tree,N); % H gives the distances and T labels each data point to a cluster
L={};
    for i = 1:N
        A = find(T==i);
        B = H(A);
        [aa,~,cc] = unique(B);dd=mode(cc);
        L = cat(1,L,B(dd(1)));
    end
ind = str2num(get(gca,'XTickLabel'));
set(gca, 'XTickLabel',L(ind))