Spaces:
Runtime error
Runtime error
""" | |
=============== | |
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() | |