[ PROMPT_NODE_26856 ]
graph-basics
[ SKILL_DOCUMENTATION ]
# NetworkX 图基础
## 图类型
NetworkX 支持四种主要的图类:
### Graph(无向图)
python
import networkx as nx
G = nx.Graph()
- 节点间具有单条边的无向图
- 不允许平行边
- 边是双向的
### DiGraph(有向图)
python
G = nx.DiGraph()
- 具有单向连接的有向图
- 边的方向很重要:(u, v) ≠ (v, u)
- 用于建模有向关系
### MultiGraph(无向多重图)
python
G = nx.MultiGraph()
- 允许相同节点对之间存在多条边
- 适用于建模多种关系
### MultiDiGraph(有向多重图)
python
G = nx.MultiDiGraph()
- 节点间具有多条边的有向图
- 结合了 DiGraph 和 MultiGraph 的特性
## 创建与添加节点
### 添加单个节点
python
G.add_node(1)
G.add_node("protein_A")
G.add_node((x, y)) # 节点可以是任何可哈希类型
### 批量添加节点
python
G.add_nodes_from([2, 3, 4])
G.add_nodes_from(range(100, 110))
### 带属性的节点
python
G.add_node(1, time='5pm', color='red')
G.add_nodes_from([
(4, {"color": "red"}),
(5, {"color": "blue", "weight": 1.5})
])
### 重要节点属性
- 节点可以是任何可哈希的 Python 对象:字符串、元组、数字、自定义对象
- 节点属性以键值对形式存储
- 使用有意义的节点标识符以保持清晰
## 创建与添加边
### 添加单条边
python
G.add_edge(1, 2)
G.add_edge('gene_A', 'gene_B')
### 批量添加边
python
G.add_edges_from([(1, 2), (1, 3), (2, 4)])
G.add_edges_from(edge_list)
### 带属性的边
python
G.add_edge(1, 2, weight=4.7, relation='interacts')
G.add_edges_from([
(1, 2, {'weight': 4.7}),
(2, 3, {'weight': 8.2, 'color': 'blue'})
])
### 从边列表添加(带属性)
python
# 从 pandas DataFrame
import pandas as pd
df = pd.DataFrame({'source': [1, 2], 'target': [2, 3], 'weight': [4.7, 8.2]})
G = nx.from_pandas_edgelist(df, 'source', 'target', edge_attr='weight')
## 检查图结构
### 基本属性
python
# 获取集合
G.nodes # 所有节点的 NodeView
G.edges # 所有边的 EdgeView
G.adj # 相邻关系的 AdjacencyView
# 计数元素
G.number_of_nodes() # 节点总数
G.number_of_edges() # 边总数
len(G) # 节点数量(简写)
# 度信息
G.deg