Search code examples
pythonpandasnetworkx

How to extend a list of elements and draw them


I detected some communities in a network and I would like to make the process as more automated as possible, especially when a big number of communities is detected. The code I used is

from networkx.algorithms.community.modularity_max 
import greedy_modularity_communities

c = list(greedy_modularity_communities(G))

That detects 3 communities. To see the clusters and plot them, I usually run the following:

community_0 = sorted(c[0])
community_1 = sorted(c[1])
community_2 = sorted(c[2])

And to draw each set of nodes:

nx.draw_networkx_nodes(G,circ_pos, nodelist=community_0, node_color='g', alpha=0.5)
nx.draw_networkx_nodes(G,circ_pos, nodelist=community_1, node_color='r', alpha=0.5)
nx.draw_networkx_nodes(G,circ_pos, nodelist=community_2, node_color='b', alpha=0.5)

where G is G = nx.karate_club_graph(). My question is how to extend the list of community_x, i.e.,the x communities that can be detected using greedy_modularity_communities, and draw them, adding iteratively the parameter in the nodelist.


Solution

  • I would do it like this:

    from networkx.algorithms.community.modularity_max 
    import greedy_modularity_communities
    
    # list of detected communities 
    c = list(greedy_modularity_communities(G))
    sortedCommunities = []
    
    # iterate through list of discovered communities. Sort each community and add them to new list.
    
    for community in c:
        sortedCommunities.append(sorted(community))
    
    # draw community
    # here we are using a different color at each iteration but cycling back to the first color.
    
    colors = ['g', 'r', 'b']
    temp_counter = 0
    for community in sortedCommunities:
        
        chosenColor = colors[temp_counter%3]
        temp_counter += 1
        nx.draw_networkx_nodes(G,circ_pos, nodelist=community , node_color=chosenColor , alpha=0.5)