1、 安装igraph
pip install igraph
2、安装用于可视化的pycairo
pip install pycairo
3、 igraph入门练习
构建一个社交网络;对每个节点、边赋属性;提取子图;生成邻接矩阵...
import igraph as ig
import matplotlib.pyplot as plt
import pickle
g = ig.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)],directed=True) # 生成一个有向图,directed控制是有向图 or无向图
g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"] #给节点vs附属性,vs、es可以看成一个字典
g.vs["age"] = [25, 31, 18, 47, 22, 23, 50]
g.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"]
g.es["is_formal"] = [False, False, True, True, True, False, True, False, False]
g.vs["label"] = g.vs["name"] # 可视化时,节点的标签由“label”属性控制
color_dict = {"m": "blue", "f": "pink"}
g.vs["color"] = [color_dict[gender] for gender in g.vs["gender"]] # 可视化时,节点的颜色由“color”属性控制
layout = g.layout("kk") # 采用布局绘图
fig, ax = plt.subplots(1,2,figsize=(15,15)) # matplotlib方式绘图,1,2为1×2两个子图
ig.plot(g, layout=layout, target=ax[0],bbox=(400, 400), margin=1,vertex_label_dist=10) # 采用matplotlib的方式绘图
member=[0,1,2,3,4]
a=g.subgraph(member) # 提取子图
ig.plot(a, layout=layout,target=ax[1], bbox=(400, 400), margin=1,vertex_label_dist=10) # 采用matplotlib的方式绘图
neis = a.predecessors(2) # 前驱(有向图有前驱和后继,无向图则是邻居)
print(neis)
b=a.get_adjacency() # 获取子图的邻接矩阵
print(b)
for i in range(a.vcount()): # 保存节点编号与节点的对应关系
id_node[i]=a.vs[i]['name']
print(id_node)
实验结果:
参考资料: