103 lines
2.7 KiB
Matlab
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 |