如何使用函数 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)
我得到的结果是:
我尝试了以下 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.
所以,您的问题是您试图访问 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)
我得到的结果是: