我需要查看(绘制或绘制)网络中的社区结构

我有这个:

import igraph
from random import randint

def _plot(g, membership=None):
    layout = g.layout("kk")
    visual_style = {}
    visual_style["edge_color"] = "gray"
    visual_style["vertex_size"] = 30
    visual_style["layout"] = layout
    visual_style["bbox"] = (1024, 768)
    visual_style["margin"] = 40
    for vertex in g.vs():
        vertex["label"] = vertex.index
    if membership is not None:
        colors = []
        for i in range(0, max(membership)+1):
            colors.append('%06X' % randint(0, 0xFFFFFF))
        for vertex in g.vs():
            vertex["color"] = str('#') + colors[membership[vertex.index]]
        visual_style["vertex_color"] = g.vs["color"]
    igraph.plot(g, **visual_style)

if __name__ == "__main__":
    karate = igraph.Nexus.get("karate")
    cl = karate.community_fastgreedy()
    membership = cl.as_clustering().membership
    _plot(karate, membership)

但顶点是传播的。 在另一个网络中,这个结果非常糟糕。

在此输入图像描述

我希望顶点按类似区域中的颜色分组。

例如:

在此输入图像描述

===============>>#1 票数:4

根据@ gabor-csardi的回答,我制作了这段代码:

import igraph
from random import randint

def _plot(g, membership=None):
    if membership is not None:
        gcopy = g.copy()
        edges = []
        edges_colors = []
        for edge in g.es():
            if membership[edge.tuple[0]] != membership[edge.tuple[1]]:
                edges.append(edge)
                edges_colors.append("gray")
            else:
                edges_colors.append("black")
        gcopy.delete_edges(edges)
        layout = gcopy.layout("kk")
        g.es["color"] = edges_colors
    else:
        layout = g.layout("kk")
        g.es["color"] = "gray"
    visual_style = {}
    visual_style["vertex_label_dist"] = 0
    visual_style["vertex_shape"] = "circle"
    visual_style["edge_color"] = g.es["color"]
    # visual_style["bbox"] = (4000, 2500)
    visual_style["vertex_size"] = 30
    visual_style["layout"] = layout
    visual_style["bbox"] = (1024, 768)
    visual_style["margin"] = 40
    visual_style["edge_label"] = g.es["weight"]
    for vertex in g.vs():
        vertex["label"] = vertex.index
    if membership is not None:
        colors = []
        for i in range(0, max(membership)+1):
            colors.append('%06X' % randint(0, 0xFFFFFF))
        for vertex in g.vs():
            vertex["color"] = str('#') + colors[membership[vertex.index]]
        visual_style["vertex_color"] = g.vs["color"]
    igraph.plot(g, **visual_style)

if __name__ == "__main__":
    g = igraph.Nexus.get("karate")
    cl = g.community_fastgreedy()
    membership = cl.as_clustering().membership
    _plot(g, membership)

结果:

在此输入图像描述

===============>>#2 票数:1

删除多个社区的边,计算没有这些边的布局,然后将其用于原始图。

===============>>#3 票数:1

要将社区的顶点组合在一起并突出显示它们,您应该使用'mark_groups = True'。 请参见http://igraph.org/python/doc/igraph.clustering-pysrc.html#VertexClustering。 情节

  ask by Alan Valejo translate from so

未解决问题?本站智能推荐:

1回复

在Python中使用igraph进行社区检测

我需要检测网络中的社区。 但是,我无法获得会员资格 有人知道如何获得会员吗?
1回复

什么是我可以使用Python iGraph使用的非重叠社区检测算法?

什么是我可以使用Python iGraph使用的非重叠社区检测算法? 我试图搜索很多,但我找不到答案,请在这里指导我...
5回复

搜索单个双向网络

我具有以下形式的数据,该数据构成了双向网络。 我想做的是写一些东西(理想情况下是用python或C语言编写)或使用现有的库来识别数据中的各个社区。 例如 A1,A2,A3,A4都是同一社区的一部分,因为它们类似地连接到B1,B2,而A5,A6,A7,A8,A9都连接到B3和B4。
1回复

获取网络中所有断开连接的节点对

我已经使用igraph (无向)对网络进行了编码,并且我想获取网络中未连接的节点对列表。 浏览igraph的文档(Python),我还没有找到执行此操作的方法。 我是否必须手动执行此操作? 一个相关的问题:给定网络中的任意一对节点,如何使用igraph查找这两个节点的公共邻居列表?
1回复

为什么我的igraph多级社区模块化无?

我使用以下方法在igraph中创建了社区: 但是如何访问这些群集级别? 我可以打印社区,但是我想访问不同的集群级别。 我尝试使用以下方式进行打印模块化: 但是我的控制台返回null。 你知道为什么吗? 谢谢。
1回复

在python igraph中选择簇和顶点的数量

我有一个完整的加权图 ,如下图所示: 目标:我的目标是能够使用python的iGraph实现选择簇数和每个簇中的顶点数 到目前为止我尝试过的内容: 如果运行了上面的代码,您将得到上面的图像作为输出。 对于我包括的两种社区发现算法,您将获得相同的图像。 我已注释掉其中
1回复

网络中自上而下的社区检测

我正在尝试寻找一种自上而下的方式来查找网络社区。 大多数可用的算法(例如,在igraph程序包中)自下而上地工作-也就是说,它们首先假设所有节点都是单身社区,然后将它们组合成更大的社区。 我想采用另一种方法,类似于如何构建决策树:从整个网络开始,然后找到可以改善某些“信息度量”的拆分,等等。
1回复

R中Multiplex网络上的社区检测

我想知道是否有现成的R软件包可以在Multiplex网络上执行社区检测? 复用是指由> 1类边连接的一组顶点。 在我的情况下,我有两类边缘,这两种类型的边缘都是加权的和无向的。
1回复

用igraph绘制网络

我想从相关矩阵创建一个网络并绘制它。 我正在尝试使用igraph。 这是我数据的一个子集。 MYDATA 这是我运行的: 现在我希望在同一个图上有所有“强”的相关性,包括正和负,所以r> 0.6和<-0.6。 此外,我希望以不同的方式为正面和负面相关
1回复

从igraph(顶点和边)中删除网络中的弱相关

我需要从相关矩阵中绘制网络。 我的一小部分数据: 这就是我做的: 我想仅绘制强相关性(> +0.6和<-0.6)我想要相对于正相关和负相关的边缘不同的颜色! 结果非常接近我想要的,但我不知道如何从图中删除弱相关的顶点(我的意思是与我设置宽度= 0的边相关的节