我在维度A
的Matlab中有一个矩阵mx2
,它在每一行中包含两个节点的标签,显示网络中的直接链接,例如:
如果网络中有4
个节点,则矩阵A
可以是A=[1 2; 1 3; 2 1; 2 4; 3 2; 4 1; 4 2]
,其中第一行表示存在从1
到2
的链接,第二行表示存在从1
到3
等的链接
你能否建议我从A中快速绘制网络?
答案 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',[])
答案 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)
答案 4 :(得分:0)
您可能也对Matgraph,用于图形操作的Matlab工具箱感兴趣:
http://www.mathworks.com/matlabcentral/fileexchange/19218-matgraph