Source code for mediaviz.community_utils
import random
import networkx as nx
import community
def _generate_random_hex_color():
""" Generates handom hex color code and returns them as string
Helper function for setting community colormaps. Does not take any input.
Returns
-------
str
hex code. Example : "#FFFFFF".
"""
r = lambda: random.randint(0,255)
return '#%02X%02X%02X' % (r(),r(),r())
[docs]def get_community_colormap(partition):
"""Takes dict of partitions after community detection and returns dict with colormap for partitions.
The function is currently used with python-louvain package, but it's a general purpose function
for randomly generating colorlaps from node attributes.Expected to change into
get_random_colormap(node_attributes) in the next version.
Parameters
----------
partition : dict
Dictionary of form {node1:partition,node2:partition....} generated after community detection.
Examples
--------
>>> import community #python-louvain package
>>> import networkx as nx
>>> from mediaviz.community_utils import get_community_colormap
>>> G = nx.florentine_families_graph()
>>> partitions = community.best_partition(G)
>>> get_community_colormap(partitions)
{0: '#A0FD29', 1: '#C3E994', 2: '#61EDD2', 3: '#DCB0DF'}
Returns
-------
dict
Dictionary containing partitions and colormaps.
"""
partitions = set(partition.values())
result = {p:_generate_random_hex_color() for p in partitions}
return result
[docs]def get_community_graph(G):
""" Takes a Graph, generates partitions from python-louvain package, sets the partitions as node
attributes and returns the Graph and partitions.
Helper function to integrate community detection with the draw function. In the draw function color_by
parameter takes a node attribute along with a colormap for the attributes. So here python-louvain is used
for getting the community partitions first and then we set those partitions as node attributes.
Examples
--------
>>> import networkx as nx
>>> G = nx.florentine_families_graph()
>>> from mediaviz.community_utils import get_community_graph
>>> G, partitions = get_community_graph(G)
Parameters
----------
G : nx.Graph
A networkx graph.
Notes
-----
If G is a digraph , as python-louvain package does not currently support digraphs, it's changed to the
undirected graph of the largest weakly connected component.See source if necessary.
Returns
-------
tuple
Returns a tuple of form (G, partitions) where G has partitions set as node attributes and
partitions are partitions generated from the python-louvain package.
"""
if type(G) == nx.DiGraph:
G = max(nx.weakly_connected_component_subgraphs(G), key=len).to_undirected()
partitions = community.best_partition(G)
for node in G.nodes():
G.node[node]["partition"] = partitions[node]
return G, partitions