我在matlab中有一个邻接矩阵。我如何绘制它的图形?由于我有 >500 个节点,我不能使用带有随机(或类似网格)坐标的 gplot。
问问题
11255 次
2 回答
8
因此,假设您拥有生物信息学工具箱,该biograph
功能非常适合您想要做的事情。
这是我过去所做的:
假设from
和to
是两个向量,包含有关系统中 to-from 节点的信息。然后你可以这样创建你的邻接矩阵:
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'
.
查看文档以获取更多信息。
这是我之前使用 biograph 创建的示例。使边缘笔直或为分支分配不同的颜色和权重很简单。此外,您可以为节点创建不同的名称,或者删除名称并在那里只使用一个“点”。
编辑
作为对文森特在评论中问题的回答:
我曾经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)
于 2013-10-19T12:20:08.213 回答
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
于 2013-10-19T06:18:08.943 回答