特定のノードがそれらの間にリンクを持つノードの循環グラフを描画したいと思います。ソーシャル ネットワーク グラフの例をいくつか示します。
(ソース: wrightresult.com )
(ソース: twit88.com )
これは MATLAB でどのように行うことができますか? 別のパッケージをインストールしなくても可能ですか?
特定のノードがそれらの間にリンクを持つノードの循環グラフを描画したいと思います。ソーシャル ネットワーク グラフの例をいくつか示します。
(ソース: 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
要素がである場合は、ノードからノードへ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
ます。切り捨てられた 20 面体 (サッカー ボールのように見える) のグラフを生成する 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 番目に示したグラフに似たより良いグラフを取得する方法)、または異なる色を使用して頂点とそのエッジのクラスターを表示することが含まれます (明らかに、グラフ クラスタリングを行う必要があります)。これらの手順はあなたに任せます:)