首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从特定的节点矩阵中用Matlab绘制网络

从特定的节点矩阵中用Matlab绘制网络
EN

Stack Overflow用户
提问于 2016-04-20 10:16:12
回答 1查看 129关注 0票数 0

我有一个节点列表,我想在它们之间画一个间接网络。例如,我有以下内容:

代码语言:javascript
复制
S=['A0JLT2 ','A0JLT2 ','A0MZ66 ', 'A1A4E9 ', 'A1A4H1 ','A1L162 ','A1L4K1 ']

T=['Q3L8U1','Q6IAN0','Q76FK4','Q9H8H2','Q6PJR7','P05787-2',' A0A0C4DH19']

可以看出,矩阵源形成源节点,矩阵目标形成目标节点(例如,矩阵S的第一个元素作为节点1连接到矩阵T的第一个元素作为节点2.等等)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 11:24:19

您可以使用biograph()

这样的函数,给定连接矩阵(即阶n的平方矩阵,其中n是节点数),如果第一个节点连接到第j节点和0,则1位于i,j位置),最终节点in (您的ST)将返回一个BioGraph对象,然后由于view()函数,您可以绘制网络。

您也可以很容易地在文档页这里上找到一些很好的例子。我的建议是仔细阅读文档,biograph()确实是一个强大的工具,具有高度的定制性:您可以获得惊人的网络绘图。

我的建议是,首先将ST写成单元格数组而不是矩阵。由于单元格数组中的每个单元格都更灵活,节点可以有更短/更长的名称:

代码语言:javascript
复制
S={'A0JLT2','A0JLT2','A0MZ66', 'A1A4E9', 'A1A4H1','A1L162','A1L4K1'};
T={'Q3L8U1','Q6IAN0','Q76FK4','Q9H8H2','Q6PJR7','P05787-2','A0A0C4DH19'};

另外,您之前所做的是创建一个长字符串,因为字符串连接,但这是Matlab如何对待“行”字符数组。

因此,总共有13个节点,是时候将边缘列表(源-目的地对)转换为邻接矩阵(或连接矩阵)了。首先,让我们用唯一的ID映射每个节点名称,您可以轻松地执行以下操作:

代码语言:javascript
复制
nodeIDs=unique([S,T]);
for i=1:length(nodeIDs)
    mapTable{i,1}=i;
    mapTable{i,2}=nodeIDs{i};
end

mapTable将有以下形式:

代码语言:javascript
复制
mapTable = 

    [ 1]    'A0A0C4DH19'
    [ 2]    'A0JLT2'    
    [ 3]    'A0MZ66'    
    [ 4]    'A1A4E9'    
    [ 5]    'A1A4H1'    
    [ 6]    'A1L162'    
    [ 7]    'A1L4K1'    
    [ 8]    'P05787-2'  
    [ 9]    'Q3L8U1'    
    [10]    'Q6IAN0'    
    [11]    'Q6PJR7'    
    [12]    'Q76FK4'    
    [13]    'Q9H8H2'    

现在创建邻接矩阵,如上面所解释的:

代码语言:javascript
复制
AdjMatrix=zeros(length(nodeIDs));                          % start matrix as all zeros
for i=1:length(S)                                          % since length(S)=length(T) you can use either the former or the latter 
    idxS=find(cellfun(@(x) strcmp(x,S{i}),mapTable(:,2))); % find the index in mapTable for the i-th element in S
    idxT=find(cellfun(@(x) strcmp(x,T{i}),mapTable(:,2))); % same as above but with i-th element from T
    AdjMatrix(idxS,idxT)=1;                                % set that element as 1
end

创建BioGraph对象并显示:

代码语言:javascript
复制
bobj=biograph(AdjMatrix,nodeIDs);
view(bobj);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36740701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档