# import networkx
:Python 的第三方库,用于绘制无向图、有向图等图结构。
- 官方文档 (opens new window)
- 图像示例 (opens new window)
- 安装:
pip install networkx
- 本身不支持 GUI 显示,通常先用它生成图像数据,再用 Matplotlib 绘制图像。
# 原理
- 无向图:
- 一条边是连接任意两个节点的线段,甚至可以连接同一个节点(称为自循环)。
- 任意两个节点之间最多只能存在一条边,不能存在多条边(称为平行边)。
- 有向图:
- 在边的某一端加上一个箭头。
- 任意两个节点之间最多只能存在一条边,这条边上最多有两个箭头。
# 用法
# 创建图像
>>> import networkx as nx
>>> g = nx.Graph() # 创建一个空的无向图
>>> g = nx.DiGraph() # 创建一个空的有向图
>>> g.add_node(1) # 添加一个节点
>>> g.add_node('Hello') # 节点的名称可以是数字、字符串等,根据哈希值区分
>>> g.add_nodes_from([2, 3]) # 从可迭代对象添加多个节点
>>> g.add_edge(1, 2) # 添加一条边,从前一个节点指向后一个节点(如果节点不存在,则会自动创建)
>>> g.add_edges_from([(1, 2), (1, 3)])
>>> g.nodes
NodeView((1, 'Hello', 2, 3))
>>> g.edges
EdgeView([(1, 2), (1, 3)])
# 绘制图像
例:
from matplotlib import pyplot as plt
nx.draw_networkx(g)
plt.show()
效果图:
相关 API :
def draw_networkx(G, # 一个 NetworkX 的图对象
pos:dict, # 各节点的坐标,比如 pos={1: (0, 0), 2: (10, -10)}
# 指定的坐标值可以为任意大小、正负的浮点数,最终用 Matplotlib 显示时会自动缩放至适合窗口的大小
# 如果指定坐标则必须指定所有节点,如果不指定坐标则随机生成
ax=None, # 指定一个 Matplotlib Axes 对象来绘制
alpha=1.0, # 图像的不透明度
nodelist:list=G.nodes() # 仅绘制指定节点
edgelist:list=G.edges() # 仅绘制指定边
node_size=300, # 节点的大小(也可以传入一个 list ,分别设置每个节点的大小)
node_color='#1f78b4', # 节点的颜色
node_shape='o', # 节点的形状
width=1.0, # 边的线宽
style='solid', # 边的线型
edge_color='black', # 边的颜色
arrows=True, # 是否显示有向图的箭头
arrowsize=10, # 箭头的大小
with_labels=True, # 是否显示节点的名称
font_size=12, # 字体的大小
font_color='black', # 字体的颜色
font_weight='normal', # 字体的宽度
font_family='sans-serif', # 字体
)