FormationControlSimulation/SOURCE/networks-toolbox/dotMatrixPlot.m

103 lines
2.7 KiB
Matlab

% Draws the matrix as a column/row sorted square dot-matrix pattern.
%
% INPUTs: adj (nxn) - adjacency matrix representation of the graph
% OUTPUTs: plot
%
% Note 1: Change colors and marker types in lines 64, 71, 78, 85 and 92, 99
% Note 2: Easy to add/remove different node orderings to/from the plot
%
% Other routines used: degrees.m, sortNodesByMaxNeighborDegree.m,
% eigenCentrality.m, newmanEigenvectorMethod.m,
% nodeBetweennessFaster.m, newmanGirvan.m, closeness.m
% GB: last updated, April 14 2015
function [] = dotMatrixPlot(adj)
n = size(adj,1);
%markersize=ceil(n/50); % scale for plotting purposes
markersize=3;
deg = degrees(adj);
Yd = sortNodesByMaxNeighborDegree(adj); % degree centrality
[~, Yb] = sort(nodeBetweennessFaster(adj)); % node betweenness centrality
[~,Yec] = sort(eigenCentrality(adj)); % eigen-centrality
[~,Yc] = sort(closeness(adj)); % closeness
% sort by module
modules = newmanEigenvectorMethod(adj);
% sort modules by length
mL=zeros(1,length(modules));
for i=1:length(modules); mL(i)=length(modules{i}); end
[~,Yms]=sort(mL);
% sort nodes by degree inside modules
Ym=[];
for mm=1:length(modules)
module=modules{Yms(mm)};
deg_module=deg(module);
[~,Yds]=sort(deg_module);
module_sorted=module(Yds);
for xx=1:length(module_sorted)
Ym=[Ym module_sorted(xx)];
end
end
mods = newmanGirvan(adj,4); % enter the expected number of communities
% sort modules by length
mL=zeros(1,length(mods));
for i=1:length(mods); mL(i)=length(mods{i}); end
[~,Yms]=sort(mL);
Ymb = [];
for mm=1:length(mods)
module=mods{Yms(mm)};
deg_module=deg(module);
[~,Yds]=sort(deg_module);
module_sorted=module(Yds);
for xx=1:length(module_sorted)
Ymb=[Ymb module_sorted(xx)];
end
end
set(gcf,'Color',[1 1 1])
subplot(3,2,1)
spy(adj(Yd,Yd),'k.',markersize)
title('ordered by degree','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square
subplot(3,2,2)
spy(adj(Yb,Yb),'k.',markersize)
title('ordered by betweenness','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square
subplot(3,2,3)
spy(adj(Yec,Yec),'k.',markersize)
title('ordered by eigen-centrality','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square
subplot(3,2,4)
spy(adj(Yc,Yc),'k.',markersize)
title('ordered by closeness','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square
subplot(3,2,5)
spy(adj(Ym,Ym),'k.',markersize)
title('ordered by module - eigenvector method','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square
subplot(3,2,6)
spy(adj(Ymb,Ymb),'k.',markersize)
title('ordered by module - Newman-Girvan','FontWeight','bold')
axis([0 n 0 n]);
set(gca,'YDir','normal')
axis square