about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/GraphViz/graph_to_dot.m
diff options
context:
space:
mode:
authorziejd22017-09-28 15:04:40 -0500
committerziejd22017-09-28 15:04:40 -0500
commit8070dc963753142bb86c4ed698d91fd623ed28e7 (patch)
treed0f6dd8fc46a49b819aa55c1a90faa14d8448883 /sourcecodes/bnt-master/GraphViz/graph_to_dot.m
parent7cc31810d53176e805532b2789955f4eedbce6bb (diff)
downloadBNW-8070dc963753142bb86c4ed698d91fd623ed28e7.tar.gz
BNW using Octave instead of Matlab.
This version of BNW should perform the same as the original version. The only difference is that it uses Octave instead of Matlab when running BayesNet Toolbox during parameter learning.

I am calling this BNW_1.02. It can be accessed at:
compbio.uthsc.edu/BNW_1.02
Diffstat (limited to 'sourcecodes/bnt-master/GraphViz/graph_to_dot.m')
-rw-r--r--sourcecodes/bnt-master/GraphViz/graph_to_dot.m86
1 files changed, 86 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/GraphViz/graph_to_dot.m b/sourcecodes/bnt-master/GraphViz/graph_to_dot.m
new file mode 100644
index 00000000..c9f692d1
--- /dev/null
+++ b/sourcecodes/bnt-master/GraphViz/graph_to_dot.m
@@ -0,0 +1,86 @@
+function graph_to_dot(adj, varargin)
+%GRAPH_TO_DOT  Makes a GraphViz (AT&T) file representing an adjacency matrix
+% graph_to_dot(adj, ...) writes to the specified filename.
+%
+% Optional arguments can be passed as name/value pairs: [default]
+%
+% 'filename' - if omitted, writes to 'tmp.dot'
+% 'arc_label' - arc_label{i,j} is a string attached to the i-j arc [""]
+% 'node_label' - node_label{i} is a string attached to the node i ["i"]
+% 'width'     - width in inches [10]
+% 'height'    - height in inches [10]
+% 'leftright' - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on graphviz, See http://www.research.att.com/sw/tools/graphviz
+%
+% See also dot_to_graph and draw_dot.
+
+% First version written by Kevin Murphy 2002.
+% Modified by Leon Peshkin, Jan 2004.
+% Bugfix by Tom Minka, Mar 2004.
+                   
+node_label = [];   arc_label = [];   % set default args
+width = 10;        height = 10;
+leftright = 0;     directed = 1;     filename = 'tmp.dot';
+
+for i = 1:2:nargin-1                    % get optional args
+  switch varargin{i}
+    case 'filename', filename = varargin{i+1};
+    case 'node_label', node_label = varargin{i+1};
+    case 'arc_label', arc_label = varargin{i+1};
+    case 'width', width = varargin{i+1};
+    case 'height', height = varargin{i+1};
+    case 'leftright', leftright = varargin{i+1};
+    case 'directed', directed = varargin{i+1};
+  end
+end
+% minka
+if ~directed
+  adj = triu(adj | adj');
+end
+
+fid = fopen(filename, 'w');
+if directed
+  fprintf(fid, 'digraph G {\n');
+  arctxt = '->'; 
+  if isempty(arc_label)
+    labeltxt = '';
+  else
+    labeltxt = '[label="%s"]';
+  end
+else
+  fprintf(fid, 'graph G {\n');
+  arctxt = '--'; 
+  if isempty(arc_label)
+    labeltxt = '[dir=none]';
+  else
+    labeltext = '[label="%s",dir=none]';
+  end
+end
+edgeformat = strcat(['%d ',arctxt,' %d ',labeltxt,';\n']);
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+  fprintf(fid, 'rankdir=LR;\n');
+end
+Nnds = length(adj);
+for node = 1:Nnds               %  process nodes 
+  if isempty(node_label)
+    fprintf(fid, '%d;\n', node);
+  else
+    fprintf(fid, '%d [ label = "%s" ];\n', node, node_label{node});
+  end
+end
+for node1 = 1:Nnds   % process edges
+  arcs = find(adj(node1,:));         % children(adj, node);
+  for node2 = arcs
+    if  ~isempty(arc_label)
+      fprintf(fid, edgeformat,node1,node2,arc_label{node1,node2});
+    else
+      fprintf(fid, edgeformat, node1, node2);    
+    end    
+  end
+end
+fprintf(fid, '}');
+fclose(fid);