You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

igraph多层时间切片网络分区绘图层内连接异常如何修复

问题修复方案

根因说明

  1. 经time_slices_to_layers转换后得到的全局图G包含3个切片共21个节点,原代码传入的vertex_label仅含7个值,会被循环重复赋值给21个节点,直接导致标签与节点对应关系错误。
  2. 默认绘图布局未按时间切片分层排列节点,导致层内连接、层间耦合边混杂,呈现结构不符合预期。

修复要点

  • 直接取用全局图节点自带的id属性作为标签,无需手动传入标签列表
  • 自定义分层布局,将不同切片的节点按行分隔排列,保证层内连接形态符合预期
  • 可选配置层内、层间边的样式,增强可视化区分度

修正后可运行代码

import leidenalg as la
import igraph as ig
import numpy as np


A1 = np.array ( [[0., 0., 0., 0., 0,0,0],[5., 0., 0., 0., 0,0,0],[1., 0., 0., 0., 0,0,0],
                 [0., 1., 2., 0., 0,0,0],[0., 0., 0., 1., 0,0,0], [0., 0., 0., 1., 0,0,0],
                 [0., 0., 0., 0., 1,1,0]] )


A2 = np.array ( [[0., 0., 0., 0., 0,0,0],[5., 0., 0., 0., 0,0,0], [1., 0., 0., 0., 0,0,0],
                 [0., 1., 2., 0., 0,0,0], [0., 0., 0., 1., 0,0,0],[0., 0., 1., 1., 0,0,0],
                 [0., 0., 0., 0., 1,1,0]] )

A3 = np.array ( [[0., 0., 0., 0., 0,0,0], [0., 0., 0., 0., 0,0,0],[0., 0., 0., 0., 0,0,0],
                 [0., 1., 2., 0., 0,0,0],[0., 0., 0., 1., 0,0,0],[0., 0., 0., 1., 0,0,0],
                 [0., 0., 0., 0., 1,1,0]] )


G_1 = ig.Graph.Weighted_Adjacency ( A1.tolist () )
G_2 = ig.Graph.Weighted_Adjacency ( A2.tolist () )
G_3 = ig.Graph.Weighted_Adjacency ( A3.tolist () )
G_1.vs ['id'] = ['A','B','C','D','E','F','G']
G_2.vs ['id'] = ['A','B','C','D','E','F','G']
G_3.vs ['id'] = ['A','B','C','D','E','F','G']

G_layers, G_interslice, G = la.time_slices_to_layers ( [G_1, G_2, G_3], interslice_weight=1,
                                                       slice_attr='slice', vertex_id_attr='id',
                                                       edge_type_attr='type', weight_attr='weight' )

partition = la.find_partition(G, la.CPMVertexPartition,resolution_parameter = 0.05)

# 自定义分层布局:同一切片的节点放在同一行,按原节点顺序横向排列
layout = []
for v in G.vs:
    # x坐标为原节点序号,y坐标为切片编号(倒序排列可让切片1在上、切片3在下)
    x = ['A','B','C','D','E','F','G'].index(v['id'])
    y = 2 - v['slice']
    layout.append((x, y))

# 配置边样式:层内边为黑色,层间边为浅灰色
edge_colors = ['black' if t == 'intraslice' else 'lightgray' for t in G.es['type']]

# 绘图:使用自定义布局、正确的节点标签、自定义边颜色
ig.plot(partition, 
        vertex_label=G.vs['id'],
        layout=layout,
        edge_color=edge_colors,
        vertex_size=20)

效果说明

运行上述代码后,节点会按时间切片分为3行排列,层内连接会保持预期结构,标签对应关系正确,层间耦合边会以浅灰色显示不干扰层内结构的查看。

内容的提问来源于stack exchange,提问作者rpb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:36:04