Library NetworkX เป็นเครื่องมือยอดนิยมสำหรับสร้างและวิเคราะห์กราฟ/เครือข่าย (Graph/Network) ใน Python การแสดงชื่อโหนด (Node Labels) บนกราฟทำได้ง่ายด้วยพารามิเตอร์ with_labels=True ในฟังก์ชัน nx.draw()
ขั้นตอนการแสดงชื่อโหนด
- Import
networkxและmatplotlib.pyplot - สร้าง Graph Object (เช่น
DiGraphสำหรับกราฟมีทิศทาง) - เพิ่มโหนดและขอบ (Edges)
- ใช้
nx.draw(G, with_labels=True)เพื่อวาดพร้อมชื่อโหนด - ปรับแต่ง Layout และสไตล์ตามต้องการ
ตัวอย่างโค้ดพื้นฐาน
import matplotlib.pyplot as plt
import networkx as nx
plt.rcParams["figure.figsize"] = [8, 6]
plt.rcParams["figure.autolayout"] = True
# สร้าง Directed Graph
G = nx.DiGraph()
# เพิ่มโหนดและขอบ
G.add_nodes_from([1, 2, 3, 4])
G.add_edges_from([(1, 2), (2, 1), (2, 3), (1, 4), (3, 4)])
# วาดกราฟพร้อมชื่อโหนด
nx.draw(G,
with_labels=True, # แสดงชื่อโหนด
node_color='lightblue', # สีโหนด
node_size=1500, # ขนาดโหนด
font_size=16, # ขนาดฟอนต์ชื่อโหนด
font_weight='bold', # ตัวหนา
arrowsize=20, # ขนาดลูกศร (สำหรับ DiGraph)
edge_color='gray', # สีขอบ
width=2) # ความหนาขอบ
plt.title("Directed Graph with Node Labels", fontsize=16, pad=20)
plt.show()
ตัวอย่างขั้นสูง: ปรับ Layout และสไตล์
import matplotlib.pyplot as plt
import networkx as nx
plt.rcParams["figure.figsize"] = [10, 8]
plt.rcParams["figure.autolayout"] = True
G = nx.Graph() # Undirected Graph
G.add_edges_from([
("Bangkok", "Nonthaburi"), ("Bangkok", "Samut Prakan"),
("Bangkok", "Pathum Thani"), ("Bangkok", "Nakhon Pathom"),
("Nonthaburi", "Pathum Thani"), ("Samut Prakan", "Chachoengsao"),
("Pathum Thani", "Ayutthaya"), ("Nakhon Pathom", "Ratchaburi")
])
# ใช้ Layout ต่างๆ
pos = nx.spring_layout(G, k=2, iterations=50, seed=42) # Force-directed
# pos = nx.circular_layout(G) # วงกลม
# pos = nx.kamada_kawai_layout(G) # สวยกว่า Spring
nx.draw_networkx_nodes(G, pos, node_color='lightcoral', node_size=2000, alpha=0.9)
nx.draw_networkx_edges(G, pos, edge_color='gray', width=2, alpha=0.6)
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family='sans-serif')
plt.title("Network of Bangkok Metropolitan Provinces", fontsize=18, pad=20)
plt.axis('off')
plt.show()
ผลลัพธ์
กราฟแสดงโหนดพร้อมชื่อชัดเจน ใช้ Layout อัตโนมัติจัดตำแหน่งให้สวยงาม
คำแนะนำเพิ่มเติม
- ใช้
nx.draw_networkx_*แยกแยะ (nodes, edges, labels) เพื่อควบคุมรายละเอียดมากขึ้น - Layout สำคัญมาก:
spring_layout(default),kamada_kawai_layout(สวยกว่า),circular_layout,shell_layout - สำหรับกราฟใหญ่ ใช้
nx.draw_networkx_labelsพร้อมfont_sizeเล็กลง - ตั้งชื่อโหนดเป็นภาษาไทยได้โดยตรง (NetworkX รองรับ Unicode)