如何在Matlab中绘制网络?

时间:2014-05-22 10:33:00

标签: matlab graph plot graph-theory graph-visualization

我在维度A的Matlab中有一个矩阵mx2,它在每一行中包含两个节点的标签,显示网络中的直接链接,例如:

如果网络中有4个节点,则矩阵A可以是A=[1 2; 1 3; 2 1; 2 4; 3 2; 4 1; 4 2],其中第一行表示存在从12的链接,第二行表示存在从13等的链接

你能否建议我从A中快速绘制网络?

5 个答案:

答案 0 :(得分:2)

如果您希望链接具有方向性,并且拥有Bioinformatics工具箱,则可以创建biograph对象。如果您愿意,这还允许使用标识字符串标记节点,请参阅帮助文件。如果没有,他们将被称为"节点1","节点2"等等。您需要将您的链接列表转换为邻接矩阵 - @RTL给了accumarray版本,你也可以使用sub2ind:

N = 4;
adj = zeros(N);
adj(sub2ind([N,N], A(:,1),A(:,2))) = 1;

bg = biograph(adj);  % make biograph object
dolayout(bg);   % automatically calculate positions for nodes
view(bg); % what it says on the tin

答案 1 :(得分:1)

n = max(A(:)); %// number of nodes
theta = linspace(0,2*pi,n+1); %// the nodes will be on a circle
theta = theta(1:end-1);
x = cos(theta); %// x coordinates of nodes
y = sin(theta); %// y coordinates of nodes
plot(x, y, 'ro') %// plot nodes
hold on
plot(x(A).', y(A).', 'b-') %// plot edges
axis image
axis(1.2*[-1 1 -1 1])
set(gca,'xtick',[],'ytick',[])

enter image description here

答案 2 :(得分:1)

使用内置gplot函数的替代解决方案

adj=accumarray(A,1)
n=size(adj,1); % number of nodes
coord=[cos((1:n).'*(2*pi/n)),sin((1:n).'*(2*pi/n))] % points on a circle for nodes
gplot(adj,coord)

对于大型网络,可以使用accumarray(A,1,[],[],0,true)

生成邻接矩阵稀疏

答案 3 :(得分:1)

MatLab> R2015b现在有Graph and Network Algorithms

A就是你所说的边缘列表。

plot(digraph(A(:,1),A(:,2))

将绘制网络。

答案 4 :(得分:0)

您可能也对Matgraph,用于图形操作的Matlab工具箱感兴趣:

http://www.mathworks.com/matlabcentral/fileexchange/19218-matgraph