★ 导言 ★
往期内容介绍了NetworkX是一个基于Python语言的复杂网络建模与分析开源包,用于创建、操作和研究复杂网络的结构、动态和功能。总之,它的功能很齐全,对于初学者而言,入门门槛较低,可作为复杂网络入门的首选工具,底层源代码可读性较高,在当下无疑是最具竞争力的复杂网络建模与分析工具之一。然而,它的一个明显的缺点是,网络的可视化效果一般,特别是对于较大规模的网络,其可视化效果较差。本期,我们将告诉大家,其实使用NetworkX也可以绘制出漂亮的网络图,前提是要掌握其中的方法。
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Author : 单哥的科研日常
# 示例程序所用库的版本:networkx==2.6.3
import networkx as nx
G = nx.barabasi_albert_graph(20, 1)
nx.draw(G)
# 设置布局,节点大小,节点颜色,连边颜色,标签等
pos = nx.spring_layout(G)
nx.draw(G, pos, node_size=100, node_color='red')
# 当设置的属性较多时,可以将其保存在字典中,以**不定长参数传入
options = {
'pos': nx.spring_layout(G),
'node_size': 300,
'node_color': 'red',
'edge_color': 'gray',
'width': 1.0, # 连边粗细
'with_labels': True,
}
nx.draw(G, **options)
其次,给出NetworkX可视化网络的进阶示例:
import networkx as nx
# 无向加权图:自定义节点坐标(布局),适用于绘制小规模网络
# 创建一个无向加权图
G = nx.Graph()
nodes = [0,1,2,3,4,5,6,7]
edge_list = [(0,1,2),(0,2,8),(0,3,1),(1,2,6),
(1, 4, 1), (2, 3, 7), (2, 4, 5), (2, 5, 1),
(2,6,2),(3,6,9),(4,5,3),(4,7,8),
(5,6,4),(5,7,6),(6,7,3)]
G.add_nodes_from(nodes)
G.add_weighted_edges_from(edge_list)
# 自定义各个节点的坐标
pos = {0: (-2,0), 1:(-1,1), 2:(-1,0), 3:(-1,-1),
4: (1,1), 5:(1,0), 6:(1,-1), 7:(2,0)}
nx.draw(G, pos, node_size=500, node_color='red', with_labels=True)
# 将连边标签以边权重值显示出来
e_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=e_labels)
# 设置连边粗细与权重成正比
edgewidth = [G.get_edge_data(*e)['weight'] for e in G.edges()]
options = {
'pos': pos,
'node_size': 500,
'node_color': 'red',
'edge_color': 'gray',
'width': edgewidth,
'with_labels': True,
}
nx.draw(G, **options)
最后,给出NetworkX可视化网络的高阶示例,这或许会让你重新审视NetworkX在复杂网络可视化中的地位。
import matplotlib.pyplot as plt
import networkx as nx
G = nx.barabasi_albert_graph(20,2)
# 绘制网络图,按度值大小设定节点大小和颜色
# 设置节点大小与度成正比
nodesize = [G.degree(i)*100 for i in G.nodes()]
node_colors = [G.degree(i) for i in G.nodes()]
options = {
'pos': nx.spring_layout(G),
'node_size': nodesize,
'node_color': node_colors,
'cmap': plt.cm.cool, # 设置节点colormap
'edge_color': 'gray',
'with_labels': True,
'node_shape': 's', # 设置节点的形状
}
nx.draw(G, **options)
plt.show()
# networkx可视化网络:高阶案例,绘制Gephi自带的一个网络
# Gephi可视化如下:
from IPython.display import Image
Image(filename = './17.png', width=600, height=450)
我们使用networkx绘制该网络如下图所示:
怎么样,看到上述网络可视化图,你还敢说networkx可视化效果一般吗?因此,我们只要掌握networkx的使用方法,用它也可以绘制出高大上的网络图。
回复“networkx高阶可视化”获取上述最后一个网络可视化的完整程序。
最后,欢迎对复杂网络感兴趣的小伙伴加入到我们的知识星球,了解更多关于复杂网络分析与可视化内容,如复杂网络的结构特征计算:度分布,集聚系数,介数中心性,特征向量中心性,最短距离,全局效率以及网络可视化等。
联系客服