wolffd@0
|
1 % ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format
|
wolffd@0
|
2 % adj2pajek2(adj, filename-stem, 'argname1', argval1, ...)
|
wolffd@0
|
3 %
|
wolffd@0
|
4 % Set A(i,j)=-1 to get a dotted line
|
wolffd@0
|
5 %
|
wolffd@0
|
6 % Optional arguments
|
wolffd@0
|
7 %
|
wolffd@0
|
8 % nodeNames - cell array, defaults to {'v1','v2,...}
|
wolffd@0
|
9 % shapes - cell array, defaults to {'ellipse','ellipse',...}
|
wolffd@0
|
10 % Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty'
|
wolffd@0
|
11 % partition - vector of integers, defaults to [1 1 ... 1]
|
wolffd@0
|
12 % This will automatically color-code the vertices by their partition
|
wolffd@0
|
13 %
|
wolffd@0
|
14 % Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/)
|
wolffd@0
|
15 % Choose File->Network->Read from the menu
|
wolffd@0
|
16 % Then press ctrl-G (Draw->Draw)
|
wolffd@0
|
17 % Optional: additionally load the partition file then press ctrl-P (Draw->partition)
|
wolffd@0
|
18 %
|
wolffd@0
|
19 % Examples
|
wolffd@0
|
20 % A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1;
|
wolffd@0
|
21 % adj2pajek2(A,'foo') % makes foo.net
|
wolffd@0
|
22 %
|
wolffd@0
|
23 % adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu
|
wolffd@0
|
24 %
|
wolffd@0
|
25 % adj2pajek2(A,'foo',...
|
wolffd@0
|
26 % 'nodeNames',{'TF1','TF2','G1','G2','G3'},...
|
wolffd@0
|
27 % 'shapes',{'box','box','ellipse','ellipse','ellipse'});
|
wolffd@0
|
28 %
|
wolffd@0
|
29 %
|
wolffd@0
|
30 % The file format is documented on p68 of the pajek manual
|
wolffd@0
|
31 % and good examples are on p58, p72
|
wolffd@0
|
32 %
|
wolffd@0
|
33 % Written by Kevin Murphy, 30 May 2007
|
wolffd@0
|
34 % Based on adj2pajek by Gergana Bounova
|
wolffd@0
|
35 % http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html
|
wolffd@0
|
36 % Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows)
|
wolffd@0
|
37 % Also, simplified her code and added some features.
|
wolffd@0
|
38
|
wolffd@0
|
39 function []=adj2pajek2(adj,filename, varargin)
|
wolffd@0
|
40
|
wolffd@0
|
41 N = length(adj);
|
wolffd@0
|
42 for i=1:N
|
wolffd@0
|
43 nodeNames{i} = strcat('"v',num2str(i),'"');
|
wolffd@0
|
44 shapes{i} = 'ellipse';
|
wolffd@0
|
45 end
|
wolffd@0
|
46
|
wolffd@0
|
47 [nodeNames, shapes, partition] = process_options(varargin, ...
|
wolffd@0
|
48 'nodeNames', nodeNames, 'shapes', shapes, 'partition', []);
|
wolffd@0
|
49
|
wolffd@0
|
50 if ~isempty(partition)
|
wolffd@0
|
51 fid = fopen(sprintf('%s.clu', filename),'wt','native');
|
wolffd@0
|
52 fprintf(fid,'*Vertices %6i\n',N);
|
wolffd@0
|
53 for i=1:N
|
wolffd@0
|
54 fprintf(fid, '%d\n', partition(i));
|
wolffd@0
|
55 end
|
wolffd@0
|
56 fclose(fid);
|
wolffd@0
|
57 end
|
wolffd@0
|
58
|
wolffd@0
|
59 fid = fopen(sprintf('%s.net', filename),'wt','native');
|
wolffd@0
|
60
|
wolffd@0
|
61 fprintf(fid,'*Vertices %6i\n',N);
|
wolffd@0
|
62 for i=1:N
|
wolffd@0
|
63 fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i});
|
wolffd@0
|
64 end
|
wolffd@0
|
65
|
wolffd@0
|
66 %fprintf(fid,'*Edges\n');
|
wolffd@0
|
67 fprintf(fid,'*Arcs\n'); % directed
|
wolffd@0
|
68 for i=1:N
|
wolffd@0
|
69 for j=1:N
|
wolffd@0
|
70 if adj(i,j) ~= 0
|
wolffd@0
|
71 fprintf(fid,' %4i %4i %2i\n',i,j,adj(i,j));
|
wolffd@0
|
72 end
|
wolffd@0
|
73 end
|
wolffd@0
|
74 end
|
wolffd@0
|
75 fclose(fid)
|
wolffd@0
|
76
|
wolffd@0
|
77
|
wolffd@0
|
78 if 0
|
wolffd@0
|
79 adj2pajek2(A,'foo',...
|
wolffd@0
|
80 'nodeNames',{'TF1','TF2','G1','G2','G3'},...
|
wolffd@0
|
81 'shapes',{'box','box','ellipse','ellipse','ellipse'});
|
wolffd@0
|
82
|
wolffd@0
|
83 N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2;
|
wolffd@0
|
84 G = reg.Atest(1:N, 1:N)';
|
wolffd@0
|
85 adj2pajek2(G, 'Ecoli100', 'partition', part)
|
wolffd@0
|
86 end
|