def draw_graph(svg_file, V, A, show_labels=False, ignore=None, back=None, loss=None, graph_attrs=None, verbose=False): """Draw an arc-flow graph in .svg format.""" from pygraphviz.agraph import AGraph if ignore is None: ignore = [] if back is None: back = [] if loss is None: loss = [] elif not isinstance(loss, (tuple, list)): loss = [loss] g = AGraph( rankdir="LR", directed=True, bgcolor="white", ranksep="1.0", nodesep="0.10", strict=False ) if graph_attrs is not None: for attr, value in graph_attrs.items(): g.graph_attr[attr] = value g.node_attr["shape"] = "ellipse" g.node_attr["color"] = "black" g.node_attr["fontcolor"] = "black" g.node_attr["penwidth"] = "2.0" lbls = sorted( set(i for (u, v, i) in A if i not in loss), key=lambda lbl: (repr(type(lbl)), lbl) ) colors = Colors.uniquecolors(len(lbls)+1, v=0.5, p=0.0) used = set() for (u, v, i) in A: if (u, v) in ignore: continue used.add(u) used.add(v) if (u, v) in back: u, v = v, u d = "back" else: d = "front" if i in loss: g.add_edge(u, v, color="black", style="dashed", penwidth=2, dir=d) else: lbl = str(i) if show_labels else "" color = colors[lbls.index(i) % len(colors)] g.add_edge(u, v, color=color, penwidth=2, label=lbl, dir=d) for v in V: if v not in used: g.add_node(v) g.draw(svg_file, format="svg", prog="dot") if verbose: print("SVG file '{0}' generated!".format(svg_file))
def AGraphComputerSetMultiDiGraph(spsg: nx.MultiDiGraph, cf: Callable) -> AGraph: A = nx.nx_agraph.to_agraph(spsg) A = AGraph(directed=True) A.node_attr["style"] = "filled" A.node_attr["shape"] = "rectangle" A.node_attr["fixedsize"] = "false" A.node_attr["fontcolor"] = "black" for node in spsg.nodes: A.add_node(node_2_string(node)) edges = spsg.edges(data=True) for edge in edges: s, t, data_dict = edge computer_set = data_dict["computers"] ss, st = tuple(map(node_2_string, (s, t))) A.add_edge(ss, st) Ae = A.get_edge(ss, st) Ae.attr["label"] = "\n".join([c.__name__ for c in computer_set]) return A
def draw_graph(svg_file, V, A, show_labels=False, ignore=None, back=None, loss=None, graph_attrs=None, verbose=False): """Draw an arc-flow graph in .svg format.""" from pygraphviz.agraph import AGraph if ignore is None: ignore = [] if back is None: back = [] if loss is None: loss = [] elif not isinstance(loss, (tuple, list)): loss = [loss] g = AGraph(rankdir="LR", directed=True, bgcolor="white", ranksep="1.0", nodesep="0.10", strict=False) if graph_attrs is not None: for attr, value in graph_attrs.items(): g.graph_attr[attr] = value g.node_attr["shape"] = "ellipse" g.node_attr["color"] = "black" g.node_attr["fontcolor"] = "black" g.node_attr["penwidth"] = "2.0" lbls = sorted(set(i for (u, v, i) in A if i not in loss), key=lambda lbl: (repr(type(lbl)), lbl)) colors = Colors.uniquecolors(len(lbls) + 1, v=0.5, p=0.0) used = set() for (u, v, i) in A: if (u, v) in ignore: continue used.add(u) used.add(v) if (u, v) in back: u, v = v, u d = "back" else: d = "front" if i in loss: g.add_edge(u, v, color="black", style="dashed", penwidth=2, dir=d) else: lbl = str(i) if show_labels else "" color = colors[lbls.index(i) % len(colors)] g.add_edge(u, v, color=color, penwidth=2, label=lbl, dir=d) for v in V: if v not in used: g.add_node(v) g.draw(svg_file, format="svg", prog="dot") if verbose: print("SVG file '{0}' generated!".format(svg_file))