python networkx中的图模块化

sna*_*ken 8 python modularity graph networkx

我已经在 python lib NetorwkX 中创建了一个图,我想实现一个模块化算法来聚集我的图的节点。我遇到了以下代码:

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

G = nx.Graph()

G = nx.read_weighted_edgelist('graphs/fashionGraph_1.edgelist')
nx.transitivity(G)

# Find modularity
part = community.best_partition(G)
mod = community.modularity(part,G)

# Plot, color nodes using community structure
values = [part.get(node) for node in G.nodes()]
nx.draw_spring(G, cmap=plt.get_cmap('jet'), node_color = values, node_size=30, with_labels=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的图有 4267 和 3692 条边。结果图是这样的:

在此处输入图片说明

我对图的节点是如何聚集的有点困惑。哪些是颜色的逻辑?

Joe*_*oel 7

文档

节点颜色。可以是单色格式字符串,也可以是与节点列表长度相同的颜色序列。如果指定了数值,它们将使用 cmap 和 vmin,vmax 参数映射到颜色。有关更多详细信息,请参阅 matplotlib.scatter。

part = community.best_partition(G)为每个节点分配一个社区 -part是一个字典,并且part[node]是节点所属的社区(每个节点都分配一个整数)。稍后values = [part.get(node) for node in G.nodes()]按照节点在 中出现的顺序为每个节点创建一个包含社区编号的列表G.nodes()

然后在绘图命令中,它将使用这些社区编号来确定节点的颜色。分配到同一个社区的所有节点都将被赋予相同的颜色。

节点的物理位置由弹簧布局分配。您可以看到 spring 布局似乎将节点放置在建议一些与community.best_partition发现不同的社区的位置。这可能有点令人惊讶,但肯定没有什么可以阻止它。它确实让我认为您使用的算法并没有适当地解释网络中的所有结构。该文件best_partition给出了基本算法的一些解释。