Python 使用NetworkX对簇中的顶点进行分组

Python 使用NetworkX对簇中的顶点进行分组,python,matplotlib,networkx,Python,Matplotlib,Networkx,我试图以图形化的方式表示一些图,我需要将一些具有共同特征的节点分组 我正在使用NetworkX,我需要对幻灯片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,我需要对幻灯片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的绘图文档如下:

所以你要问的这个数字有4个不同的社区,它们是基于每个社区内有很多边缘而外部没有很多边缘而聚集在一起的

如果您不想投入太多精力,spring_布局通常有助于将紧密联系的社区组织在一起。spring_布局的基本算法就像边是弹簧一样(节点相互排斥)。因此,许多边将节点保持在一起。请注意,它会随机初始化位置,因此每次都会得到不同的输出

最简单的方法就是

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

pos = {}
for node in G.nodes_iter():
    pos[node] = (xcoord, ycoord).
其中xcoord和ycoord是您希望节点位于的坐标

那就做吧 绘制网络X(G,位置=位置)

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

为几个节点定义fixedpos,然后运行 弹簧布局 告诉它哪些节点是固定的,并将fixedpos作为初始位置。然后,它将固定这些部件,并安装周围的所有部件

下面是一些生成网络的代码,该网络有4个完全连接的部分和它们之间的一些其他边。(实际上,它生成一个完整的网络,然后删除这些部分之间的所有边,但不包括少数边)。然后它用一个简单的弹簧布局来绘制它。然后将其中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()
将networkx导入为nx
随机输入
将pylab作为py导入
从数学导入层
G=nx.完整的_图(20)
对于G.边()中的边:
如果是地板(边缘[0]/5.)=地板(边缘[1]/5]):
if random.random()