| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- """
- ===============
- Dedensification
- ===============
- Examples of dedensification of a graph. Dedensification retains the structural
- pattern of the original graph and will only add compressor nodes when doing so
- would result in fewer edges in the compressed graph.
- """
- import matplotlib.pyplot as plt
- import networkx as nx
- plt.suptitle("Dedensification")
- original_graph = nx.DiGraph()
- white_nodes = ["1", "2", "3", "4", "5", "6"]
- red_nodes = ["A", "B", "C"]
- node_sizes = [250 for node in white_nodes + red_nodes]
- node_colors = ["white" for n in white_nodes] + ["red" for n in red_nodes]
- original_graph.add_nodes_from(white_nodes + red_nodes)
- original_graph.add_edges_from(
- [
- ("1", "C"),
- ("1", "B"),
- ("2", "C"),
- ("2", "B"),
- ("2", "A"),
- ("3", "B"),
- ("3", "A"),
- ("3", "6"),
- ("4", "C"),
- ("4", "B"),
- ("4", "A"),
- ("5", "B"),
- ("5", "A"),
- ("6", "5"),
- ("A", "6"),
- ]
- )
- base_options = {"with_labels": True, "edgecolors": "black"}
- pos = {
- "3": (0, 1),
- "2": (0, 2),
- "1": (0, 3),
- "6": (1, 0),
- "A": (1, 1),
- "B": (1, 2),
- "C": (1, 3),
- "4": (2, 3),
- "5": (2, 1),
- }
- ax1 = plt.subplot(1, 2, 1)
- plt.title("Original (%s edges)" % original_graph.number_of_edges())
- nx.draw_networkx(original_graph, pos=pos, node_color=node_colors, **base_options)
- nonexp_graph, compression_nodes = nx.summarization.dedensify(
- original_graph, threshold=2, copy=False
- )
- nonexp_node_colors = list(node_colors)
- nonexp_node_sizes = list(node_sizes)
- for node in compression_nodes:
- nonexp_node_colors.append("yellow")
- nonexp_node_sizes.append(600)
- plt.subplot(1, 2, 2)
- plt.title("Dedensified (%s edges)" % nonexp_graph.number_of_edges())
- nonexp_pos = {
- "5": (0, 0),
- "B": (0, 2),
- "1": (0, 3),
- "6": (1, 0.75),
- "3": (1.5, 1.5),
- "A": (2, 0),
- "C": (2, 3),
- "4": (3, 1.5),
- "2": (3, 2.5),
- }
- c_nodes = list(compression_nodes)
- c_nodes.sort()
- for spot, node in enumerate(c_nodes):
- nonexp_pos[node] = (2, spot + 2)
- nx.draw_networkx(
- nonexp_graph,
- pos=nonexp_pos,
- node_color=nonexp_node_colors,
- node_size=nonexp_node_sizes,
- **base_options,
- )
- plt.tight_layout()
- plt.show()
|