2012-06-13 5 views
4

Я использую объект CLUSTERGRAM из Bioinformatics Toolbox (версия 3.7). MATLAB версия R2011a.Переносные векторы объекта CLUSTERGRAM (MATLAB)

Я хотел бы получить перестановки векторов для строки и столбцы для 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 от:

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 и dendrogram, но упорядочение листьев намного лучше (оптимально) в clustergram, чем в дендрограмме.

+0

Вы не получите информацию от 'get (cgo, 'ColumnLabels')' и 'get (cgo, 'RowLabels')'? – Jonas

+0

@Jonas: Я действительно использую другие ярлыки, но ваше решение может быть обходным путем. Не устанавливать временные метки, затем получать векторы и сбрасывать метки. Логически я думал, что 'get (cgo, 'RowLabels')' вернет метки в исходном порядке, но я не тестировал. Похоже, что 'set' и' get' работают по-разному, поэтому 'set (cgo, 'RowLabels', get (cgo, 'RowLabels'))' даст неверный результат. В любом случае, пожалуйста, отправьте его в качестве ответа. – yuk

+0

сделано по запросу :) – Jonas

ответ

4

От взгляда на документацию, я думаю, что get(gco,'ColumnLabels') и get(gco,'RowLabels'), где gco - объект clustergram, должен давать вам переупорядоченные метки. Обратите внимание, что соответствующие методы set берут метки в оригинальном порядке и внутренне переупорядочивают их.

Следовательно, если вы использовали пользовательские метки (set(gco,'RowLabels',originalLabels))

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

должна возвращать строку перестановку.

+0

Это еще проще, чем я думал. Одна из поправок: 'originalLabels' должна идти как второй аргумент, так как мне нужны векторы для воспроизведения кластерной граммы из исходных данных. Большое спасибо! – yuk

+0

@yuk: хорошо, отредактировано (кстати, у вас тоже есть право редактировать) – Jonas

Смежные вопросы