gpt4 book ai didi

python - 使用 NetworkX 在集群中对顶点进行分组

转载 作者:太空狗 更新时间:2023-10-29 21:08:51 25 4
gpt4 key购买 nike

我正在尝试以图形方式表示一些图形,我需要将一些具有共同特征的节点分组到集群中。

我正在使用 NetworkX,我需要对来自 this tutorial 的图表做一些类似的事情,来自幻灯片 44,左图。

我想在每个集群周围画一些分界线。我当前的代码是这样的:

vec = self.colors
colors = (linspace(0, 1, len(set(vec))) * 20 + 10)
nx.draw_circular(g, node_color=array([colors[x] for x in vec]))
show()

我想找一个例子,看看如何使用 networkx 对图进行聚类。

最佳答案

我不确定你的问题是什么。我想你是在问“我如何让 networkx 将一些节点放在一起”

在开始回答之前,networkx 的绘图文档在此处:http://networkx.lanl.gov/reference/drawing.html

因此,您要问的那个数字有 4 个不同的社区,这些社区基于每个社区内有很多边缘而在外部没有很多边缘而聚集在一起。

如果您不想在其中投入太多精力,spring_layout 通常适合将紧密结合的社区组合在一起。 spring_layout 的基本算法就像边缘是 Spring (并且节点排斥)一样。所以很多边使节点靠得很近。请注意,它会随机初始化位置,因此每次您都会得到不同的输出。

最简单的方法就是

nx.draw_spring(G)

但也许您想要更多。如果你愿意,你可以固定每个节点的位置。定义一个dict,通常命名为pos。

pos = {}
for node in G.nodes_iter():
pos[node] = (xcoord, ycoord).

其中 xcoord 和 ycoord 是您希望节点所在的坐标。

然后就做 draw_networkx(G, pos = pos)

这通常需要付出很多努力。所以有时候你只需告诉它其中一些必须在特定的地方,让 networkx 做剩下的

为几个节点定义fixedpos然后运行 Spring 布局告诉它哪些节点是固定的,并给它 fixedpos 作为初始位置。然后它会固定那些并适合周围的所有其他东西。

这里有一些代码可以生成一个网络,该网络具有 4 个完全连接的部分和它们之间的其他一些边。 (实际上它生成了一个完整的网络,然后删除了这些部分之间的所有边,只剩下几条边)。然后它用一个简单的 Spring 布局绘制它。然后它将其中的 4 个固定在正方形的角上,并将其他节点放置在这些固定位置周围。

import networkx as nx
import random
import pylab as py
from math import floor

G = nx.complete_graph(20)

for edge in G.edges():
if floor(edge[0]/5.)!=floor(edge[1]/5.):
if random.random()<0.95:
G.remove_edge(edge[0],edge[1])


nx.draw_spring(G)
py.show()


fixedpos = {1:(0,0), 6:(1,1), 11:(1,0), 16:(0,1)}
pos = nx.spring_layout(G, fixed = fixedpos.keys(), pos = fixedpos)

nx.draw_networkx(G, pos=pos)

py.show()

您还可以为边指定权重,将权重传递给 spring_layout,较大的权重会告诉它使相应的节点靠得更近。因此,一旦您确定了您的社区,如有必要,请增加社区/集群内的权重,以使它们保持紧密联系。

请注意,您还可以指定每个节点的颜色,因此可以直接为每个社区/集群指定颜色。

如果您随后想要围绕这些集群中的每一个绘制曲线,则必须通过 matplotlib 来完成。

关于python - 使用 NetworkX 在集群中对顶点进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17511949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com