Python使用iGraph绘制节点层次结构

2024-09-28 23:36:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含员工及其工作角色的数据集,每个工作角色都被分配了一个代码:0代表高层管理人员,1代表中层管理人员,2代表普通员工。我现在想用层次图来描绘这些角色,这样所有代码0的职员都在上面,1在中间,2在下面。我在iGraph中找到了这样做的布局(见下文),但是不知道如何控制哪些节点出现在哪里。有没有我缺少的参数来控制这个?任何帮助都将不胜感激。在

CSV: https://github.com/Laurie-Bamber/Enron_Corpus/blob/master/15Below_60Employees_1.csv

角色代码: https://github.com/Laurie-Bamber/Enron_Corpus/blob/master/Dict_role_code.csv

GML公司: https://github.com/Laurie-Bamber/Enron_Corpus/blob/master/15Below_60Employees_1.gml

p.S.边缘是指员工之间的电子邮件,而不是等级制度的衡量标准。在

enter image description here

Code:
G = Graph.Read_GML('Test.gml')
visual_style['layout'] = G.layout_reingold_tilford()
plot(G, **visual_style)

Tags: csv代码httpsgithubmastercom角色员工
1条回答
网友
1楼 · 发布于 2024-09-28 23:36:30

我提出一个解决办法,对你的要求稍作修改。如果垂直地绘制级别,水平地绘制角色级别的人员,则一个级别上有多个人员,因此标签相互重叠。相反,我在水平地绘制角色级别,而在一个级别上的个体则垂直分布,留出足够的空间来查看标签。在

我不认为有一个预先构建的布局功能,可以满足您的要求。然而,它不是很难作出自己的布局。这样做的基本部分是指定要绘制节点的x-y坐标。{1>你可以在这个函数之后使用。在

坐标是我的坐标,也就是坐标为1的坐标。我将通过使角色级别上的每个节点比该级别上一个节点高一个来分配y坐标。我用一个小字典来记录每一层接下来的高度。在

我将使用您提供的文件名,并假定这些文件在当前工作目录中。在

import csv
from igraph import *

## Load graph
G = Graph.Read_GML('15Below_60Employees_1.gml')

## Load role levels
reader = csv.reader(open('Dict_role_code.csv'))
dx = dict(reader)

## Create a layout
height = { '1':0, '2':0, '3':0 }
COORD = []
for L in G.vs['label']:
    height[dx[L]] = height[dx[L]] + 1
    COORD.append((float(dx[L]), height[dx[L]]))
LO = Layout(COORD)

## Create the style
visual_style = {}
visual_style['vertex_size'] = 8
visual_style['vertex_frame_color'] = 'orange'
visual_style['layout'] = LO
visual_style['margin'] = 60
visual_style['edge_color'] = '#00000044'

plot(G, **visual_style)

Enron

我认为这为你提供了一个良好的起点。你可以从这里调整位置。在

相关问题 更多 >