来自CLUSTERGRAM对象的置换向量(MATLAB)
我正在使用生物信息学工具箱(3.7版)中的对象。 MATLAB版本R2011a 我想为clustergram获取行和列的置换向量,就像我可以使用函数一样:来自CLUSTERGRAM对象的置换向量(MATLAB),matlab,permutation,dendrogram,Matlab,Permutation,Dendrogram,我正在使用生物信息学工具箱(3.7版)中的对象。 MATLAB版本R2011a 我想为clustergram获取行和列的置换向量,就像我可以使用函数一样: x = magic(10); >> [~,~,permrows] = dendrogram(linkage(x,'average','euc')) permrows = 9 10 6 7 8 1 2 4 5 3 >> [~,~,permco
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];
那么,如何以编程方式获取这些向量呢?有人熟悉这个物体吗
有人能提出一个好的替代方案吗?我知道我可以结合imagesc和树状图函数创建一个类似的图形,但在聚类图中,叶子排序比在树状图中要好得多。从文档中看,我猜
get(gco,'ColumnLabels')
和get(gco,'RowLabels')
,其中gco
是聚类图对象,应该给你重新排序的标签。请注意,相应的set
-方法以原始顺序接收标签,并在内部对其重新排序
因此,如果您使用了自定义标签(set(gco,'RowLabels',originAllabel)
)
应返回行排列 你不会从
get(cgo,'ColumnLabels')
和get(cgo,'RowLabels')
获取信息吗?@Jonas:我实际上使用了其他标签,但你的解决方案可以是一种变通方法。不设置临时标签,然后获取向量并重置标签。从逻辑上讲,我认为get(cgo,'RowLabels')
将按原始顺序返回标签,但我没有进行测试。似乎set
和get
的工作方式不同,因此set(cgo,'RowLabels',get(cgo,'RowLabels'))
将给出错误的结果。无论如何,请把它作为一个答案贴出来。这比我想象的还要容易。一个修正:originalLabels
应该作为第二个参数,因为我需要向量来从原始数据复制聚类图。非常感谢@yuk:好的,编辑(顺便说一句:你也有编辑的特权)
[~,permrows] = ismember(get(gco,'RowLabels'),originalLabels)