-
Notifications
You must be signed in to change notification settings - Fork 23
/
plotDNarc.m
85 lines (72 loc) · 2.61 KB
/
plotDNarc.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function [ nodeColors ] = plotDNarc( contactSequence, nNodes, timeInterval)
% Create a line plot showing contacts across time. Node colors assigned
% randomly.
%
% Input:
% contactSequence = nEdges x 3 array of contacts (i,j,t)
%
% Optional Input:
% nNodes = number of nodes total in dynamic network. Default assumes
% all nodes are present in contactSequence.
% timeInterval = start and end time of network. Default assumes the
% initial time is at the time of first contact and end time is at
% the last contact.
%
% Output:
% nodeColors = nNodes x 3 array of node colors.
%
% Inspiration from Holme and Saramaki, "Temporal Networks" 2011.
%
%
% Reference: Ann E. Sizemore and Danielle S. Bassett, "Dynamic Graph
% Metrics: Tutorial, Toolbox, and Tale." Submitted. (2017)
%
% Main function:
if ~exist('nNodes','var') || isempty(nNodes);
nNodes = length(unique([contactSequence(:,1); contactSequence(:,2)]));
end
if ~exist('timeInterval','var') || isempty(timeInterval)
timeInterval = [min(contactSequence(:,3)) max(contactSequence(:,3))];
end
nEdges = size(contactSequence,1);
% draw gray lines for each of the nodes
for n = 1:nNodes
plot([min(timeInterval) max(timeInterval)],[n n],'-',...
'Color',[.75 .75 .75],'LineWidth',1.5)
hold on
end
axis([min(timeInterval)-1 max(timeInterval)+1 0.5 nNodes])
a = axis; %// get axis size
plot([a(1) a(2)],[a(3) a(3)],'w','LineWidth',1); %// plot white line over x axis
plot([a(1) a(1)],[a(3) a(4)],'w','LineWidth',1); %// plot white line over y axis
% draw contacts (black)
for edges = 1:nEdges
t = contactSequence(edges,3);
a = 1;
b = abs(contactSequence(edges,1) - contactSequence(edges,2));
theta = linspace(-pi/2,pi/2,100);
ys = 0.5*(1+(sin(theta)));
plot(t + 0.7*(cos(theta).^2), ...
min(contactSequence(edges,1:2)) + b*ys,'k-')
%plot([t t],[contactSequence(edges,1) contactSequence(edges,2)],...
% 'k-')
end
%axis off
% each node needs a color
nodeColors = rand(nNodes,3);
for n = 1:nNodes
times1 = contactSequence(contactSequence(:,1) == n,3);
times2 = contactSequence(contactSequence(:,2) == n,3);
plot([times1' times2'], n*ones(1,length([times1' times2'])),'.',...
'Color',nodeColors(n,:),'MarkerSize',30);
plot(min(timeInterval)-0.8,n,'.','Color',nodeColors(n,:),'MarkerSize',30)
end
box off
ax = gca;
ax.TickLength = [0 0];
xlabel('Time')
ax.XTick = timeInterval(1):timeInterval(2);
ax.YTick = 1:nNodes;
set(gcf,'Position',[0 0 1100 400])
ylabel('Nodes')
end