如何使用函数 dendrogram(tree, name, value) 在 Matlab 中将 Label 放入树状图中?

How to put Label in a dendogram in Matlab using function dendrogram(tree, name, value)?

我尝试了以下 link(不幸的是,没有用): Associated Labels in a dendrogram plot - MATLAB 而不是站 ID,我的将是 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 是行 ID,

0 1 2 3 4 是列号,

我想根据 PDBId 标记叶节点,但是当我从第 2 列读取 csv 文件时(只有数字,留下 PDBIds),稍后将 'Labels' 设置为 '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 作为叶节点的标签。 提前致谢。

所以,您的问题是您试图访问 filename 的结构字段,但 filename 是字符数组,而不是结构。此外,readcsv 只能读取数值,因此无论如何它都不会为您获取标签。

您可以使用 readtable 来获取行名和列名,然后从 table 中读取行名。这是我使用的代码:

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)

我得到的结果是: