4

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

我想为clustergram获取行和列的排列向量,就像我可以使用树状图函数一样:

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 和 dendrogram 的聚类不一样,很可能是由于优化的叶子排序计算(我不想禁用它)。

例如,对于来自的 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];

簇图示例

那么,如何以编程方式获取这些向量呢?有熟悉这个物体的吗?

有人可以提出一个好的选择吗?我知道我可以创建一个结合 imagesc 和 dendrogram 函数的类似图形,但是在 clustergram 中的叶子排序比在 dendrogram 中要好得多(最佳)。

4

1 回答 1

4

通过查看文档,我猜想get(gco,'ColumnLabels')get(gco,'RowLabels')gcoclustergram 对象在哪里,应该给你重新排序的标签。请注意,相应的set-methods 以原始顺序接收标签并在内部重新排序它们。

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

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

应该返回行排列。

于 2012-06-14T16:40:17.273 回答