来自CLUSTERGRAM对象的置换向量(MATLAB)

时间:2012-06-13 19:32:05

标签: matlab permutation dendrogram

我正在使用Bioinformatics Toolbox中的CLUSTERGRAM对象(版本3.7)。 MATLAB版本R2011a。

我想获得clustergram的行和列的排列向量,就像我可以用dendrogram函数做的那样:

x = magic(10);
>> [~,~,permrows] = dendrogram(linkage(x,'average','euc'))
permrows =
     9    10     6     7     8     1     2     4     5     3
>> [~,~,permcols] = dendrogram(linkage(x','average','euc'))
permcols =
     6     7     8     9     2     1     3     4     5    10

我发现群集和树形图中的聚类不一样,很可能是由于最优的叶子排序计算(我不想禁用它)。

例如,对于来自:

的clustergram
clustergram(x)

'average''eucledian'是clustergram的默认方法)

载体(如附图所示)应为:

permrows = [1 2 4 5 3 10 9 6 7 8];
permcols = [1 2 8 9 6 7 10 5 4 3];

clustergram example

那么,如何以编程方式获取这些向量?有人熟悉这个对象吗?

有人可以建议一个好的选择吗?我知道我可以创建一个结合imagesc和树形图函数的相似图形,但是在树形图中叶子排序比在树形图中更好(最优)。

1 个答案:

答案 0 :(得分:4)

通过查看文档,我猜get(gco,'ColumnLabels')get(gco,'RowLabels'),其中gco是clustergram对象,应该为您提供重新排序的标签。请注意,相应的set - 方法会按原始顺序接收标签,并在内部重新排序。

因此,如果您使用了自定义标签(set(gco,'RowLabels',originalLabels)

[~,permrows] = ismember(get(gco,'RowLabels'),originalLabels)

应该返回行排列。