class Graph: def __init__(self): self.lookup = {} self.edges = [] def add_edge(self, x): if x in self.lookup: return nx = x for y in " -()[]": nx = nx.replace(y, "_") # normalise the label self.lookup[x] = nx def add(self, x, y): self.add_edge(x) self.add_edge(y) self.edges.append( (x, y) ) def write(self): tmp = ["digraph {"] for x, y in self.edges: tmp.append( '%s -> %s;' % (self.lookup[x], self.lookup[y])) for x, y in self.lookup.iteritems(): tmp.append('%s [label="%s"]' % (y, x)) tmp.append("}") return "\n".join(tmp)
Tuesday 12 July 2016
Basic Graphviz input file generator in Python
Generating a Graphviz Dot input file is fairly simple, so I tend to code it up myself rather than use an existing library. However the need to normalise the node names complicates things a little bit. Here's a copy of the one I wrote today. Note that you may need to beef up the normalisation if your node names contain additional non-alphanumeric characters. (Note to future self: next time just autoincrement the node labels instead of trying to use a normalised form.)
No comments:
Post a Comment