Python NetworkX绘制精美网络图实战指南

方予
方予
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍如何使用Python的NetworkX库结合Matplotlib绘制高质量网络图。内容涵盖Graph、DiGraph等四种图类型的创建,节点与边的添加方法,以及nx.draw()函数的核心参数解析。通过详解布局算法、颜色、大小及透明度设置,帮助读者摆脱基础红点图,实现专业级网络可视化效果,并提供了相关源码参考链接。

引言与背景

近期在数学建模中,为了在三天内快速掌握Python并完成网络相关题目,需要绘制网络图。查阅网络资料后发现,多数教程仅展示基础且视觉效果较差的红点图,且未涉及网络算法。因此,笔者深入学习了http://networkx.github.io/官方文档,并在此总结个人经验。内容仅供参考,如有错误欢迎指正,期待共同交流。

实现网络图绘制主要依赖两个模块:matplotlib.pyplot用于绘图,networkx用于网络结构处理。

正文部分将详细展开操作步骤。

环境安装配置

一、安装matplotlib和networkx(作者环境为Python 2.7及PyCharm)。

在Python安装目录下的Scripts文件夹中,若存在pip.exe文件,可通过CMD进入该目录,执行`pip install --pre matplotlib`进行下载。若系统中有easy_install,也可使用相应命令。若上述方法均不可行,可访问官网https://pypi.python.org/pypi/matplotlib/1.5.3下载对应版本。

对于networkx,直接在PyCharm的Project Interpreter中添加该库即可。

网络图基础创建

二、创建图对象。

NetworkX提供了四种图类型:Graph(无多重边的无向图)、DiGraph(无多重边的有向图)、MultiGraph(有多重边的无向图)以及MultiDiGraph(有多重边的有向图)。


  import network as nx 
  G = nx.Graph()#创建空的网络图
  G = nx.DiGraph()
  G = nx.MultiGraph()
  G = nx.MultiDiGraph()

接下来介绍添加节点和边的多种方法。


G.add_node('a')#添加点a
G.add_node(1,1)#用坐标来添加点
G.add_edge('x','y')#添加边,起点为x,终点为y
G.add_weight_edges_from([('x','y',1.0)])#第三个输入量为权值
#也可以
list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)]
G.add_weight_edges_from([(list)])

随后是图形显示的实现步骤。


#需要导入matplotlib
import matplotlib.pyplot as plt


nx.draw(G)
plt.show()

核心绘图参数详解

为了生成更精美的图形,我们将深入解析nx.draw()函数的用法。


nx.draw(G,pos = nx.random_layout(G),node_color = 'b',edge_color = 'r',with_labels = True,font_size =18,node_size =20)

pos参数指定布局方式,常用选项包括spring_layout、random_layout、circle_layout和shell_layout。node_color控制节点颜色,支持r、b、y、k、w等缩写;同理,edge_color用于控制边的颜色。

with_labels参数决定节点是否显示名称;size参数设置节点大小;font_color指定文字颜色。

掌握上述内容后,即可绘制出网络上常见的NetworkX基础教程示例,效果大致如下。

高级可视化技巧

三、绘制精美网络图。

如果你希望得到如下效果的图形:

或者是这种风格:

亦或是另一种样式:

请继续阅读后续内容。

首先需要掌握两个关键绘图方法。


def draw_networkx_edges(G, pos,
            edgelist=None,
            width=1.0,
            edge_color='k',
            style='solid',
            alpha=1.0,
            edge_cmap=None,
            edge_vmin=None,
            edge_vmax=None,
            ax=None,
            arrows=True,
            label=None,
            **kwds):

G:图表
  一个networkx图
pos:dictionary
  将节点作为键和位置作为值的字典。
  位置应该是长度为2的序列。

edgelist:边缘元组的集合
  只绘制指定的边(默认= G.edges())

width:float或float数组
  边线宽度(默认值= 1.0)

edge_color:颜色字符串或浮点数组
  边缘颜色。可以是单颜色格式字符串(default ='r'),
  或者具有与edgelist相同长度的颜色序列。
  如果指定了数值,它们将被映射到
  颜色使用edge_cmap和edge_vmin,edge_vmax参数。

style:string
  边线样式(默认='solid')(实线|虚线|点线,dashdot)

alpha:float
  边缘透明度(默认值= 1.0)

edge_ cmap:Matplotlib色彩映射
  用于映射边缘强度的色彩映射(默认值=无)

edge_vmin,edge_vmax:float
  边缘色图缩放的最小值和最大值(默认值=无)

ax:Matplotlib Axes对象,可选
  在指定的Matplotlib轴中绘制图形。

arrows:bool,optional(default = True)
  对于有向图,如果为真,则绘制箭头。

label:图例的标签

def draw_networkx_nodes(G, pos,
            nodelist=None,
            node_size=300,
            node_color='r',
            node_shape='o',
            alpha=1.0,
            cmap=None,
            vmin=None,
            vmax=None,
            ax=None,
            linewidths=None,
            label=None,
            **kwds):

G代表图表对象。

即一个NetworkX图实例。


pos:dictionary
  将节点作为键和位置作为值的字典。
  位置应该是长度为2的序列。

ax:Matplotlib Axes对象,可选
  在指定的Matplotlib轴中绘制图形。

nodelist:list,可选
  只绘制指定的节点(默认G.nodes())

node_size:标量或数组
  节点大小(默认值= 300)。如果指定了数组,它必须是
  与点头长度相同。

node_color:颜色字符串或浮点数组
  节点颜色。可以是单颜色格式字符串(default ='r'),
  或者具有与点头相同长度的颜色序列。
  如果指定了数值,它们将被映射到
  颜色使用cmap和vmin,vmax参数。看到
  matplotlib.scatter更多详细信息。

node_shape:string
  节点的形状。规格为matplotlib.scatter
  标记,'so ^> v <dph8'(默认='o')之一。

alpha:float
  节点透明度(默认值= 1.0)

cmap:Matplotlib色图
  色彩映射节点的强度(默认=无)

vmin,vmax:float
  节点色彩映射缩放的最小值和最大值(默认值=无)

线宽:[无|标量|序列]
  符号边框的线宽(默认值= 1.0)

label:[无|串]
  图例的标签

理解这两点后,你便能快速读懂几乎所有NetworkX精美图的源码。

参考网络图案例源码:http://networkx.github.io/。

以上就是使用Python NetworkX绘制精美网络图的完整教程,希望能为大家提供参考,欢迎支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。