Как поместить 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.
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)