-
Notifications
You must be signed in to change notification settings - Fork 3
Description
We can make a dot digraph from a DAG which is very useful to view it.
We also have some convenient ways to make a DAG, such as the code_to_dag function.
Yet I still find myself sometimes building a graph using the dot language (or rather a mini-dot language (I use from qo import dgdisp)). This may indicate the utility of building a DAG from a dot string.
I tried to write a function that takes a graphviz.Digraph instance and returns the edges of the graph as pairs of node IDs, so that I could then use this to make my DAG (using a similar approach as code_to_dag). But I failed. It seems like those graphviz objects are for writing, not reading -- at least not reading into some python-ready object.
I then decided to go through networkx, which has a lot of conversion tools.
This code looked promising.
My slightly modified version:
import networkx as nx
G = nx.complete_graph(5)
A = nx.nx_agraph.to_agraph(G) # convert to a graphviz graph
X1 = nx.nx_agraph.from_agraph(A) # convert back to networkx (but as Graph)
X2 = nx.Graph(A) # fancy way to do conversion
G1 = nx.Graph(X1) # now make it a Graph
A.write("k5.dot") # write to dot file
X3 = nx.nx_agraph.read_dot("k5.dot") # read from dotfile
# You can also create .png directly with the AGraph.draw method
A.draw("k5.png", prog="neato")
# This is what I added, to be able to see the graph:
from IPython.display import Image
Image('k5.png')