【发布时间】:2012-06-13 19:32:05
【问题描述】:
我正在使用来自 Bioinformatics Toolbox(版本 3.7)的 CLUSTERGRAM 对象。 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 和 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 中要好得多(最佳)。
【问题讨论】:
-
你不会从
get(cgo,'ColumnLabels')和get(cgo,'RowLabels')得到信息吗? -
@Jonas:我实际上使用其他标签,但您的解决方案可能是一种解决方法。不要临时设置标签,然后获取向量并重置标签。从逻辑上讲,我认为
get(cgo,'RowLabels')会按原始顺序返回标签,但我没有测试。看来set和get的工作方式不同,所以set(cgo,'RowLabels',get(cgo,'RowLabels'))会给你错误的结果。无论如何,请将其发布为答案。
标签: matlab permutation dendrogram