3 import matplotlib.pyplot as plt
13 # always keep the same seed
16 # parse lines, new vertice is:
17 # vertice LEVEL OPERATOR:VERTICE_NAME
19 # edge OPERATOR:VERTICE_NAME OPERATOR:VERTICE_NAME
21 l = sys.stdin.readline()
24 m = re.match("^vertice ([0-9]+) ([^\s]+)$", l)
28 operator, name = m.groups()[1].split(":")
29 print "vert: operator = %s, level = %d, name = %s"%(operator, level, name)
30 labels[name] = operator
31 init_pos[name] = (random.random(), -level)
36 m = re.match("^edge ([^\s]+) ([^\s]+)$", l)
38 vertice1, vertice2 = m.groups()
39 G.add_edge(vertice1, vertice2)
42 pos = nx.spring_layout(G, pos=init_pos)
44 # root node is blue and bigger
45 rootnode = filter(lambda x:levels[x] == 0, levels.keys())
46 nx.draw_networkx_nodes(G, pos, node_color='b', node_size=2000, nodelist=rootnode)
49 for level in range(1, maxlevel + 1):
50 othernodes = filter(lambda x:levels[x] == level, levels.keys())
51 color = (1., float(level)/maxlevel, float(level)/maxlevel)
52 color = [color] * len(othernodes)
53 nx.draw_networkx_nodes(G, pos, node_color=color, node_size=1000, nodelist=othernodes)
55 nx.draw_networkx_edges(G, pos)
56 nx.draw_networkx_labels(G, pos, labels, font_size=20, font_family='sans-serif')
59 plt.savefig("weighted_graph.png") # save as png