Skip to content

建立 2026-09-14 更新 2026-09-14

用 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 有標籤、方向箭頭、地理座標等完整例子。