打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
你信吗,Python NetworkX也可以绘制出高大上的网络图

★ 导言 ★

往期内容介绍了NetworkX是一个基于Python语言的复杂网络建模与分析开源包,用于创建、操作和研究复杂网络的结构、动态和功能。总之,它的功能很齐全,对于初学者而言,入门门槛较低,可作为复杂网络入门的首选工具,底层源代码可读性较高,在当下无疑是最具竞争力的复杂网络建模与分析工具之一。然而,它的一个明显的缺点是,网络的可视化效果一般,特别是对于较大规模的网络,其可视化效果较差。本期,我们将告诉大家,其实使用NetworkX也可以绘制出漂亮的网络图,前提是要掌握其中的方法。

★ 正文 ★  
我们接下来分三步介绍,首先介绍Networkx可视化网络的初级方法,也就是我们大家普遍认为的,可视化效果一般的情况:
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Author : 单哥的科研日常
# 示例程序所用库的版本:networkx==2.6.3
import networkx as nx
G = nx.barabasi_albert_graph(201)
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高阶可视化”获取上述最后一个网络可视化的完整程序。

最后,欢迎对复杂网络感兴趣的小伙伴加入到我们的知识星球,了解更多关于复杂网络分析与可视化内容,如复杂网络的结构特征计算:度分布,集聚系数,介数中心性,特征向量中心性,最短距离,全局效率以及网络可视化等。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
NetworkX,网络结构图最强绘制工具·····
使用pyvis对社交网路数据可视化
直播案例 | 使用PageRank对全球机场进行排序
科学网—复杂网络分析库NetworkX学习笔记(4):网络可视化
数据可视化:四种关系图数据可视化的效果对比!
如果连这些图都不会,还怎么让文章有逼格?!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服