4

Bioinformatics Toolbox(ver 3.7)のCLUSTERGRAMオブジェクトを使用しています。MATLABバージョンR2011a。

樹状図関数で実行できるように、クラスターグラムの行と列の順列ベクトルを取得したいと思います。

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(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関数と樹状図関数を組み合わせて同様の図を作成できることは知っていますが、葉の順序は樹状図よりもクラスターグラムの方がはるかに優れています(最適です)。

4

1 に答える 1

4

ドキュメントを見るとget(gco,'ColumnLabels')、クラスターグラムオブジェクトget(gco,'RowLabels')であるandgcoは、並べ替えられたラベルを提供するはずです。対応するset-methodsはラベルを元の順序で取り込み、内部でそれらを並べ替えることに注意してください。

したがって、カスタムラベルを使用した場合(set(gco,'RowLabels',originalLabels)

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

行の順列を返す必要があります。

于 2012-06-14T16:40:17.273 に答える