Skip to content

Instantly share code, notes, and snippets.

@sortafreel
Last active April 2, 2020 18:11
Show Gist options
  • Save sortafreel/93bf184c6bbba709462d0ca7435611ec to your computer and use it in GitHub Desktop.
Save sortafreel/93bf184c6bbba709462d0ca7435611ec to your computer and use it in GitHub Desktop.
NetworkX Visualization of random simple scheme
import networkx as nx
import matplotlib.pyplot as plt
from networkx.readwrite.json_graph import (node_link_data, tree_data)
from pprint import pprint
from networkx.drawing.nx_agraph import graphviz_layout
G = nx.DiGraph()
nodes = [
{'label': 'root'},
{'label': 'field'},
{'label': 'field'},
{'label': 'field'},
{'label': 'field'},
{'label': 'field'},
{'label': 'field'},
{'label': 'field'},
{'label': 'rule'},
{'label': 'rule'},
{'label': 'rule'},
{'label': 'rule'},
{'label': 'route'},
]
edges = [
[12, 0, {'label': 'TRAVERSE'}],
[0, 1, {'label': ':ROOT OF'}],
[0, 2, {'label': ':ROOT OF'}],
[0, 3, {'label': ':ROOT OF'}],
[0, 4, {'label': ':ROOT OF'}],
[0, 5, {'label': ':ROOT OF'}],
[1, 8, {'label': ':EXTRACT'}],
[2, 9, {'label': ':EXTRACT'}],
[3, 9, {'label': ':EXTRACT'}],
[4, 6, {'label': ':PARENT OF'}],
[4, 7, {'label': ':PARENT OF'}],
[6, 9, {'label': ':EXTRACT'}],
[7, 10, {'label': ':EXTRACT'}],
[5, 11, {'label': ':EXTRACT'}]
]
G.add_nodes_from([(i, x) for i, x in enumerate(nodes)])
G.add_edges_from(edges)
nx.nx_agraph.write_dot(G, 'test.dot')
plt.title('Simple scheme')
pos = graphviz_layout(G, prog='dot')
nx.draw_networkx_nodes(G, pos=pos, nodelist=[i for i, x in enumerate(nodes) if x['label'] == 'route'],
node_color='cyan',
label='Route')
nx.draw_networkx_nodes(G, pos=pos, nodelist=[i for i, x in enumerate(nodes) if x['label'] == 'root'], node_color='red',
label='Root')
nx.draw_networkx_nodes(G, pos=pos, nodelist=[i for i, x in enumerate(nodes) if x['label'] == 'field'],
node_color='blue',
label='Fields')
nx.draw_networkx_nodes(G, pos=pos, nodelist=[i for i, x in enumerate(nodes) if x['label'] == 'rule'],
node_color='green',
label='Rules')
# nx.draw_networkx_labels(G, pos)
nx.draw_networkx_edges(G, pos=pos)
nx.draw_networkx_edge_labels(G, pos, font_size=8, edge_labels={(x[0], x[1]): x[2]['label'] for x in edges},
font_color='blue')
plt.axis('off')
plt.legend(scatterpoints=1, markerscale=0.5)
plt.show()
pprint(node_link_data(G))
print('*' * 50)
pprint(tree_data(G, root=12))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment