|
5 | 5 |
|
6 | 6 |
|
7 | 7 | def draw_graph(modules_entities: Dict) -> None: |
8 | | - gr = nx.Graph() |
9 | | - module_edges = [] |
10 | | - sub_edges = [] |
| 8 | + G = nx.DiGraph() |
| 9 | + module_edges_all = [] |
| 10 | + sub_edges_all = [] |
11 | 11 | for module in modules_entities: |
| 12 | + _module = os.path.basename(module) |
| 13 | + module_edges = [] |
12 | 14 | for entity in modules_entities[module]: |
13 | | - module_edges.append((os.path.basename(module), entity)) |
| 15 | + sub_edges = [] |
| 16 | + module_edges.append((_module, entity)) |
14 | 17 | for dep in modules_entities[module][entity]: |
15 | 18 | if '.' in dep: |
16 | 19 | dep = dep.split('.')[1].replace('.', '.py') |
17 | 20 | sub_edges.append((entity, dep)) |
18 | | - gr.add_edges_from(module_edges) |
19 | | - gr.add_edges_from(sub_edges) |
20 | | - pos = nx.spring_layout(gr) |
21 | | - nx.draw(gr, pos, font_size=12, with_labels=False) |
| 21 | + G.add_edges_from(sub_edges) |
| 22 | + sub_edges_all += sub_edges |
| 23 | + if not modules_entities[module]: |
| 24 | + G.add_node(_module) |
| 25 | + G.add_edges_from(module_edges) |
| 26 | + module_edges_all += module_edges |
| 27 | + pos = nx.spring_layout(G) |
| 28 | + module_list = [os.path.basename(module) for module in modules_entities] |
| 29 | + module_list_labels = {module_name: module_name for module_name in module_list} |
| 30 | + |
| 31 | + entities_labels = {edge[1]: edge[1] for edge in module_edges_all} |
| 32 | + nx.draw_networkx_nodes(G, pos, nodelist=module_list, |
| 33 | + node_color='#009c2c', node_size=800, node_shape="s", alpha=0.8) |
| 34 | + nx.draw(G, pos, node_color='#009c2c', arrows=False, edge_color='#ffffff', node_shape="o", alpha=0.8) |
| 35 | + |
| 36 | + nx.draw_networkx_labels(G, pos, labels=module_list_labels, font_weight='bold', font_size=11) |
| 37 | + nx.draw_networkx_labels(G, pos, labels=entities_labels, font_weight='bold', font_family='Arial', font_size=10) |
| 38 | + nx.draw_networkx_edges(G, pos, edgelist=module_edges_all, |
| 39 | + edge_color='#009c2c', width=2, |
| 40 | + arrows=False, style="dashed", node_size=50) |
| 41 | + nx.draw_networkx_edges(G, pos, edgelist=sub_edges_all, |
| 42 | + edge_color='r', width=2, |
| 43 | + arrows=False, style="dashed") |
22 | 44 | for p in pos: # raise text positions |
23 | 45 | pos[p][1] += 0.07 |
24 | | - nx.draw_networkx_labels(gr, pos) |
25 | 46 | plt.show() |
0 commit comments