Visualization of Louvain partitions in Networkx

Viewed 1637

Please help me change visualize the result of Louvain clustering algorithm. I took the code from the site https://github.com/taynaud/python-louvain Can I rewrite the code so that each cluster has its own shape (circle, triangle, square ...)?

import community as community_louvain
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import networkx as nx

# load the karate club graph
G = nx.karate_club_graph()

# compute the best partition
partition = community_louvain.best_partition(G)

# draw the graph
pos = nx.spring_layout(G)
# color the nodes according to their partition
cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
nx.draw_networkx_nodes(G, pos, partition.keys(), node_size=40,
                       cmap=cmap, node_color=list(partition.values()))
nx.draw_networkx_edges(G, pos, alpha=0.5)
plt.show()
1 Answers

Unfortunately nx.draw_networkx_nodes does not accept an iterable of shapes, so you'll have to loop over the nodes and plot them individually. Also, we'll have to index the generated cmap, otherwise, the single valued community values will get mapped to the same initial cmap color. For the possible shapes I'm just replicating the string of available shapes mentioned in the docs and indexing it based on the partition number:

# load the karate club graph
G = nx.karate_club_graph()

# compute the best partition
partition = community_louvain.best_partition(G)

cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
shapes = 'so^>v<dph8'

plt.figure(figsize=(12,8))
# draw the graph
pos = nx.spring_layout(G)
# color the nodes according to their partition
cmap = cm.get_cmap('viridis', max(partition.values()) + 1)
nx.draw_networkx_edges(G, pos, alpha=0.5)
for node, color in partition.items():
    nx.draw_networkx_nodes(G, pos, [node], node_size=100,
                           node_color=[cmap.colors[color]],
                           node_shape=shapes[color])

enter image description here

Related