Vas*_*ass 13 matlab plot graph-theory graph graph-visualization
我想画一个节点的圆形图,其中某些节点之间有链接.以下是社交网络图表中的一些示例:
example1 http://wrightresult.com/wp-content/uploads/social-network-circle5-lg.jpg

example3 http://twit88.com/blog/wp-content/uploads/2008/07/windowslivewriterjung-ed84jung-2.jpg
如何用MATLAB完成?是否可以不安装单独的包装?
abc*_*bcd 13
这是你可以做你想做的一种方式.首先,在您感兴趣的圆上生成点
clear;
theta=linspace(0,2*pi,31);theta=theta(1:end-1);
[x,y]=pol2cart(theta,1);
Run Code Online (Sandbox Code Playgroud)
接下来,如果您知道连接的节点对,则可以跳过此步骤.但在许多情况下,您从其他计算中获得连接矩阵,并从中找到连接节点的索引.在这里,我创建了一个布尔连接矩阵.所以,如果有N节点,连接矩阵是NxN对称矩阵,其中如果i,j第i个元素是1,这意味着你有来自节点的连接i到节点j和0其他.然后,您可以提取非零对的下标以获取节点连接(仅需要上三角形).
links=triu(round(rand(length(theta))));%# this is a random list of connections
[ind1,ind2]=ind2sub(size(links),find(links(:)));
Run Code Online (Sandbox Code Playgroud)
这是我用上面的代码生成的连接矩阵.

现在我们只需要一次一个地绘制连接
h=figure(1);clf(h);
plot(x,y,'.k','markersize',20);hold on
arrayfun(@(p,q)line([x(p),x(q)],[y(p),y(q)]),ind1,ind2);
axis equal off
Run Code Online (Sandbox Code Playgroud)
这将给你一个类似于你的例子的数字

受Cleve Moler 最新博客文章的启发,您还可以使用该gplot函数绘制给定邻接矩阵和节点坐标的图形.
这是一个使用的例子bucky; MATLAB的演示函数部分,生成截断的二十面体(看起来像一个足球)的图形.我们将仅在此示例中使用其邻接矩阵,因为我们将顶点布置为圆形:
%# 60-by-60 sparse adjacency matrix
A = bucky();
N = length(A);
%# x/y coordinates of nodes in a circular layout
r = 1;
theta = linspace(0,2*pi,N+1)'; theta(end) = [];
xy = r .* [cos(theta) sin(theta)];
%# labels of nodes
txt = cellstr(num2str((1:N)','%02d'));
%# show nodes and edges
line(xy(:,1), xy(:,2), 'LineStyle','none', ...
'Marker','.', 'MarkerSize',15, 'Color','g')
hold on
gplot(A, xy, 'b-')
axis([-1 1 -1 1]); axis equal off
hold off
%# show node labels
h = text(xy(:,1).*1.05, xy(:,2).*1.05, txt, 'FontSize',8);
set(h, {'Rotation'},num2cell(theta*180/pi))
Run Code Online (Sandbox Code Playgroud)

我们可以更进一步,尽量减少边缘交叉.也就是说,我们想要重新排列节点,使边缘尽可能接近圆周.
这可以通过找到矩阵的对称置换来最小化其带宽(非零更接近对角线)来完成

p = symrcm(A);
A = A(p,p);
txt = txt(p);
Run Code Online (Sandbox Code Playgroud)
在这种情况下的结果:

其他改进包括用曲线样条线替换直线来绘制边缘(这样你得到的图形类似于你所展示的第二个图形),或使用不同的颜色来显示顶点及其边缘的簇(显然你会需要做图形聚类).我会把这些步骤留给你:)