跳轉中,訪問新網域網站 https://samiliu.xyz

logo头像
Snippet 博客主题

networkx 筆記

NetworkX 用於建立網絡模型、繪製網路圖、分析網絡結構等等的算法以及一些基本的繪圖工具。


創建 Graph

networkx 有四種圖,分別為無向圖、有向圖、多重邊無向圖、多重邊有向圖。

import networkx as nx

# 創建空網路圖
G = nx.Graph()
G = nx.DiGraph()
G = nx.MultiGraph()
G = nx.MultiDiGraph()

添加節點

G.add_node('A')
G.add_nodes_from(['B','C'])

添加邊與權重

G.add_edge('A', 'D', weight=0.8)
G.add_edges_from([
    ('B','C', {'weight': 0.3}), 
    ('C','A', {'weight': 0.6})
])

刪除

# 刪除節點
G.remove_node('BC')

# 刪除邊
G.remove_edge('A', 'D')

# 刪除所有節點與邊
G.clear()

另外也可以從 DataFrame 載入

import pandas as pd

df = pd.DataFrame(
    [('A', 'D', 0.3), 
     ('A', 'B', 0.7), 
     ('B', 'E', 0.6), 
     ('C', 'E', 0.2), 
     ('D', 'E', 0.2)],
    columns=['src', 'dst', 'weight']
)
G = nx.from_pandas_edgelist(df, 'src', 'dst', edge_attr='weight')

繪圖 nx.draw()

需要使用 matplotlib

import matplotlib.pyplot as plt

nx.draw(G)
plt.show()

詳解 nx.draw()

G: networkx 圖

pos: 佈局指定節點排列形式

node_size: 節點大小(預設300)

node_color: 節點顏色(預設紅色)

node_shape: 節點形狀(預設o)

alpha: 透明度(預設1.0 不透明, 0為完全透明)

width: 邊線的寬度(預設1.0)

edge_color: 邊線顏色(預設黑色)

style: 邊線的樣式(solid|dashed|dotted|dashdot)

with_labels: 節點是否帶標籤

font_size: 標籤字體大小(預設12)

font_color: 標籤字體顏色(預設黑色)

pos

nx.random_layout:隨機分佈
nx.circular_layout:節點在圓環上均勻分佈
nx.shell_layout:節點在同心圓上分佈
nx.spring_layout: 用 Fruchterman-Reingold 演算法排列節點
nx.spectral_layout:根據圖的拉普拉斯特徵向量排列節

範例:

plt.figure(1, figsize=(8,8))
nx.draw(
    G, 
    pos=nx.spring_layout(G),
    node_color='b',
    edge_color='r',
    with_labels=True,
    font_size=15,
    node_size=40,
    width=0.7
)
plt.show()