ノード間のリンクを備えた円形形成でノードのネットワークを描画する
-
24-10-2019 - |
質問
特定のノードにそれらの間にリンクがあるノードの円形グラフを描きたいと思います。ソーシャルネットワークグラフの例をいくつか紹介します。
(ソース: wrightresult.com)
(ソース: twit88.com)
これはMATLABでどのように行うことができますか?別のパッケージをインストールせずに可能ですか?
解決
これがあなたが望むことをすることができる1つの方法です。まず、興味のある円の上のポイントを生成します
clear;
theta=linspace(0,2*pi,31);theta=theta(1:end-1);
[x,y]=pol2cart(theta,1);
次に、接続されているノードのペアがわかっている場合は、この手順をスキップできます。しかし、多くの場合、他の計算から接続マトリックスを取得し、そこから接続されたノードのインデックスを見つけます。ここでは、接続のブールマトリックスを作成しました。だから、あるなら N
ノード、接続マトリックスは次のとおりです NxN
対称行列、場合 i,j
th要素はです 1
, 、それはあなたがノードから接続を持っていることを意味します i
ノードに j
と 0
それ以外は。その後、非ゼロペアのサブスクリプトを抽出してノード接続を取得できます(上部三角形のみが必要です)。
links=triu(round(rand(length(theta))));%# this is a random list of connections
[ind1,ind2]=ind2sub(size(links),find(links(:)));
これは、上記のコードで生成した接続マトリックスです。
今、私たちは一度に1つずつ接続をプロットする必要があります
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
これはあなたの例に似た数字を与えます
他のヒント
最新のものに触発されました ブログ投稿 Cleve Molerによって、使用することもできます gplot
隣接する行列とノード座標を与えられたグラフを描画する機能。
使用の例を次に示します bucky
;切り捨てられたicosahedron(サッカーボールのように見える)のグラフを生成する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))
これをさらに一歩進めて、エッジの交差点を最小限に抑えることができます。つまり、エッジが円の円周にできるだけ近くになるように、ノードを再配置したいと考えています。
これは、対称性を見つけることで実行できます 順列 帯域幅を最小化するマトリックス(非ゼロは対角線に近い)
p = symrcm(A);
A = A(p,p);
txt = txt(p);
この場合の結果:
その他の改善には、直線を湾曲したスプラインに置き換えるための湾曲したスプラインに置き換えること、つまり、表示された2番目のスプラインと同様のグラフが得られるようになります)、または異なる色を使用して頂点とそのエッジのクラスターを表示することが含まれます(明らかにあなたはグラフクラスタリングを行う必要があります)。私はそれらのステップをあなたに任せます:)