首页 > 解决方案 > 如何在圆形图中绘制社区网络

问题描述

我有一个大图,我用 Louvain 算法从中提取了一个社区网络。现在我将在圆形图中绘制这些社区的表示,如下所示:

在此处输入图像描述

我怎样才能做到这一点?是否有任何编程语言的工具或库可以做到这一点?先感谢您。

标签: pythongraphnetworkx

解决方案


对于图形布局,您有 NetworkX's nx.circular_layout,它将按上述方式排列节点。不过,您可能希望在某些方面进行与我在这里所做的不同的自定义。例如,对于边缘颜色,我刚刚选择了每个边缘的第一个节点,并为该节点的精确分区设置了颜色。您还可以添加重要节点的标签,例如具有高中心度的节点,节点大小也相同。

这是一个使用随机图的示例:

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

G = nx.barabasi_albert_graph(300, 2)

# compute the best partition
partition = community_louvain.best_partition(G)
cmap = cm.get_cmap('viridis', max(partition.values()) + 1)

plt.figure(figsize=(12,8))
# draw the graph
pos = nx.circular_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=100,
                       cmap=cmap, node_color=list(partition.values()))
edge_colors = [partition[edge[0]] for edge in G.edges()]
nx.draw_networkx_edges(G, 
                       pos, 
                       alpha=0.5,
                      edge_color=edge_colors)
plt.box(False)

在此处输入图像描述


推荐阅读