igraph多层时间切片网络分区绘图层内连接异常如何修复
问题修复方案
根因说明
- 经
time_slices_to_layers转换后得到的全局图G包含3个切片共21个节点,原代码传入的vertex_label仅含7个值,会被循环重复赋值给21个节点,直接导致标签与节点对应关系错误。 - 默认绘图布局未按时间切片分层排列节点,导致层内连接、层间耦合边混杂,呈现结构不符合预期。
修复要点
- 直接取用全局图节点自带的
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
相关产品推荐
相关产品推荐

