繁体   English   中英

在matlab中从邻接矩阵创建图形

[英]Creating graph from adjacency matrix in matlab

我在matlab中有一个邻接矩阵。 我如何绘制图表? 由于我有> 500个节点,我不能使用随机(或网格状)坐标的gplot。

因此,假设您拥有生物信息学工具箱 ,则biograph功能非常适合您想要做的事情。

这是我过去做过的事情:

假设fromto是包含有关系统中的起始节点的信息的两个向量。 然后你可以这样创建你的邻接矩阵:

Sys = sparse(from,to,1,s,s);  
Adj_mat = tril(Sys + Sys'); 

我假设您已经有了邻接矩阵adj_mat ,在这种情况下,您只需要执行以下操作:

bg = biograph(Adj_mat,[],'ShowArrows','off','ShowWeights','off');
h = view(bg);  

我添加了一些参数来说明一些可能性。 我想要箭头,跳过那一部分。

默认情况下,节点将根据“最小能量”标准放置,这意味着“分支交叉”的数量被最小化。 布局可以更改,例如添加'LayoutType','Radial'

查看文档以获取更多信息。

这是我之前使用传记创建的一个例子。 使边缘笔直,或为树枝分配不同的颜色和重量很简单。 此外,您可以为节点创建不同的名称,或删除名称,而只是在那里有一个“点”。

在此输入图像描述

编辑

作为评论中文森特问题的答案:

我使用set(edges,'LineWidth',1.5)来设置边缘权重。 在此处查看一些其他文档和示例。

%% Color affected lines:
set(h.nodes(nn),'Color',[0.2 0.8 0.2]);
fowEdges = getedgesbynodeid(h,get(h.Nodes(nn),'ID'));
revEdges = getedgesbynodeid(h,get(h.Nodes(fliplr(nn)),'ID'));
edges = [fowEdges;revEdges];
set(edges,'LineColor',[0.2 0.8 0.2])
set(edges,'LineWidth',1.5)

%% Color faulted line:
set(h.nodes(newFaultNodes),'Color',[1 0.4 0.4]);
fowEdges = getedgesbynodeid(h,get(h.Nodes(newFaultNodes),'ID'));
revEdges = getedgesbynodeid(h,get(h.Nodes(fliplr(newFaultNodes)),'ID'));
edges = [fowEdges;revEdges];
set(edges,'LineColor',[1 0 0])
set(edges,'LineWidth',2)

看看这个功能: gplot

例:

% Plot half of a "Bucky ball" carbon molecule, placing asterisks at each node:
k = 1:30;
[B,XY] = bucky;
gplot(B(k,k),XY(k,:),'-*')
axis square

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM