用 matplotlib 畫圖
最常見的流程:算好節點座標 pos,再分別畫節點、邊、標籤。把三步拆開,才能依中心性改節點大小、依權重改邊寬。
最短路徑:先看一眼
import networkx as nx
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
nx.draw(G, with_labels=True)
plt.show()
nx.draw() 會關掉座標軸、圖填滿整個 axes。需要標題或圖例時,改用 nx.draw_networkx()。
佈局(layout)
座標是一個 {node: (x, y)} 字典。常用:
| 函式 | 適合 |
|---|---|
spring_layout |
一般小圖,力導向,預設 |
circular_layout |
看環狀結構 |
kamada_kawai_layout |
比 spring 常更穩、較慢 |
shell_layout |
分層環 |
spectral_layout |
依拉普拉斯特徵向量 |
pos = nx.spring_layout(G, seed=1)
nx.draw_networkx(G, pos=pos, node_size=300, font_size=8)
plt.axis("off")
plt.show()
seed= 能讓每次圖案差不多。沒固定種子時,spring 每次會跳。
依資料改樣式
cent = nx.degree_centrality(G)
sizes = [3000 * cent[n] for n in G.nodes]
colors = [G.nodes[n].get("club", "") == "Mr. Hi" for n in G.nodes]
nx.draw_networkx_nodes(G, pos, node_size=sizes, node_color=colors, cmap=plt.cm.Set2)
nx.draw_networkx_edges(G, pos, alpha=0.4)
nx.draw_networkx_labels(G, pos, font_size=8)
plt.axis("off")
plt.show()
邊權重當寬度時,先取出權重再縮放到合理像素,例如 1~5。
何時不要用 NetworkX 畫
節點上萬、邊數十萬時,matplotlib 會卡、也看不清楚。請 write_gexf / write_graphml 後改用 Gephi 或 Cytoscape。官方也建議把視覺化視為輔助,不是 NetworkX 的核心能力。
更多範例
官方 Drawing gallery 有標籤、方向箭頭、地理座標等完整例子。