Как поместить Label в дендограмму в Matlab, используя функцию дендрограммы (дерево, имя, значение)?

Я попробовал следующую ссылку (к сожалению, не сработало): Связанные метки на графике дендрограммы - MATLAB Вместо идентификаторов станций, у меня будет PDBId.

Моя проблема: я создаю дендрограмму из CSV-файла "Similarity_nogrp.csv":

PDBId 0         1         2           3             4     
1A06 1         0.05344457 0.439285476 0.46664877 0.40868216 
1B6C 0.05344457 1         0.03371103 0.029899324 0.033972369
1BO1 0.439285476 0.03371103 1         0.5579095 0.488785068 
1CDK 0.46664877 0.029899324 0.5579095 1         0.50682912 
1CJA 0.40868216 0.033972369 0.488785068 0.50682912 1 
1CSN 0.490366809 0.047467331 0.50842029 0.533638473 0.465180315
1E8X 0.036246998 0.002009194 0.057903016 0.066882369 0.058359239 
Здесь, в первой строке,

PDBId - это идентификатор строки,

0 1 2 3 4 - номера столбцов,

Я хочу пометить конечные узлы в соответствии с PDBId, но, поскольку я читаю файл csv из 2-го столбца (только числа, оставляя PDBIds), позже при установке "Метки" как "PDBId" в dendrogram() я получаю ошибку:

Вот мой код:

filename = 'D:\\matlab codes\\similarity_nogrp.csv'
X = csvread(filename,1,1) 
Z = linkage(X,'average')
C = cluster(Z, 'maxclust', 3)
H = dendrogram(Z,'Orientation','left','Labels',filename.PDBId)

Ошибка для последней строки:

??? Attempt to reference field of non-structure array.
Пожалуйста, предоставьте мне способ, чтобы я мог использовать PDBId в качестве меток для конечных узлов. Заранее спасибо.

1 ответ

Решение

Итак, ваша проблема в том, что вы пытаетесь получить доступ к полю структуры filename, но filename это массив символов, а не структура. Также, readcsv может читать только числовые значения, поэтому он все равно не получит метки.

Ты можешь использовать readtable вместо этого, чтобы получить имена строк и столбцов, а затем прочитать имена строк из таблицы. Вот код, который я использовал:

filename = 'D:\\matlab codes\\similarity_nogrp.csv';
T = tableread(filename,'ReadVariableNames', true, 'ReadRowNames', true)
X = T{:,:}; % Get the data from the table without row/col names
Z = linkage(X,'average')
C = cluster(Z, 'maxclust', 3)
H = dendrogram(Z,'Orientation','left','Labels',T.Properties.RowNames)

И результаты, которые я получил: Результаты

Другие вопросы по тегам