wolffd@0: % ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format wolffd@0: % adj2pajek2(adj, filename-stem, 'argname1', argval1, ...) wolffd@0: % wolffd@0: % Set A(i,j)=-1 to get a dotted line wolffd@0: % wolffd@0: % Optional arguments wolffd@0: % wolffd@0: % nodeNames - cell array, defaults to {'v1','v2,...} wolffd@0: % shapes - cell array, defaults to {'ellipse','ellipse',...} wolffd@0: % Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty' wolffd@0: % partition - vector of integers, defaults to [1 1 ... 1] wolffd@0: % This will automatically color-code the vertices by their partition wolffd@0: % wolffd@0: % Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/) wolffd@0: % Choose File->Network->Read from the menu wolffd@0: % Then press ctrl-G (Draw->Draw) wolffd@0: % Optional: additionally load the partition file then press ctrl-P (Draw->partition) wolffd@0: % wolffd@0: % Examples wolffd@0: % A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1; wolffd@0: % adj2pajek2(A,'foo') % makes foo.net wolffd@0: % wolffd@0: % adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu wolffd@0: % wolffd@0: % adj2pajek2(A,'foo',... wolffd@0: % 'nodeNames',{'TF1','TF2','G1','G2','G3'},... wolffd@0: % 'shapes',{'box','box','ellipse','ellipse','ellipse'}); wolffd@0: % wolffd@0: % wolffd@0: % The file format is documented on p68 of the pajek manual wolffd@0: % and good examples are on p58, p72 wolffd@0: % wolffd@0: % Written by Kevin Murphy, 30 May 2007 wolffd@0: % Based on adj2pajek by Gergana Bounova wolffd@0: % http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html wolffd@0: % Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows) wolffd@0: % Also, simplified her code and added some features. wolffd@0: wolffd@0: function []=adj2pajek2(adj,filename, varargin) wolffd@0: wolffd@0: N = length(adj); wolffd@0: for i=1:N wolffd@0: nodeNames{i} = strcat('"v',num2str(i),'"'); wolffd@0: shapes{i} = 'ellipse'; wolffd@0: end wolffd@0: wolffd@0: [nodeNames, shapes, partition] = process_options(varargin, ... wolffd@0: 'nodeNames', nodeNames, 'shapes', shapes, 'partition', []); wolffd@0: wolffd@0: if ~isempty(partition) wolffd@0: fid = fopen(sprintf('%s.clu', filename),'wt','native'); wolffd@0: fprintf(fid,'*Vertices %6i\n',N); wolffd@0: for i=1:N wolffd@0: fprintf(fid, '%d\n', partition(i)); wolffd@0: end wolffd@0: fclose(fid); wolffd@0: end wolffd@0: wolffd@0: fid = fopen(sprintf('%s.net', filename),'wt','native'); wolffd@0: wolffd@0: fprintf(fid,'*Vertices %6i\n',N); wolffd@0: for i=1:N wolffd@0: fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i}); wolffd@0: end wolffd@0: wolffd@0: %fprintf(fid,'*Edges\n'); wolffd@0: fprintf(fid,'*Arcs\n'); % directed wolffd@0: for i=1:N wolffd@0: for j=1:N wolffd@0: if adj(i,j) ~= 0 wolffd@0: fprintf(fid,' %4i %4i %2i\n',i,j,adj(i,j)); wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: fclose(fid) wolffd@0: wolffd@0: wolffd@0: if 0 wolffd@0: adj2pajek2(A,'foo',... wolffd@0: 'nodeNames',{'TF1','TF2','G1','G2','G3'},... wolffd@0: 'shapes',{'box','box','ellipse','ellipse','ellipse'}); wolffd@0: wolffd@0: N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2; wolffd@0: G = reg.Atest(1:N, 1:N)'; wolffd@0: adj2pajek2(G, 'Ecoli100', 'partition', part) wolffd@0: end