Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การสร้าง Multipartite Graph ด้วย NetworkX และ Matplotlib

Multipartite Graph แสดงโหนดในหลายชั้น (Layers) เชื่อมต่อระหว่างชั้นที่ติดกัน ใช้ NetworkX สร้าง Graph และ Matplotlib วาด

ขั้นตอน

  1. ตั้งค่าขนาด Figure
  2. กำหนดขนาด Subset และ สี
  3. สร้าง Function multilayered_graph()
  4. กำหนดสีโหนดตาม Layer
  5. จัด Layout ด้วย multipartite_layout
  6. วาด Graph และแสดงผล

ตัวอย่างโค้ด


import itertools
import matplotlib.pyplot as plt
import networkx as nx

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

subset_sizes = [5, 5, 4, 3, 2, 4, 4, 3]
subset_color = [
    "gold", "violet", "violet", "violet", 
    "violet", "limegreen", "limegreen", "darkorange"
]

def multilayered_graph(*subset_sizes):
    extents = nx.utils.pairwise(itertools.accumulate((0,) + subset_sizes))
    layers = [range(start, end) for start, end in extents]
    G = nx.Graph()
    for (i, layer) in enumerate(layers):
        G.add_nodes_from(layer, layer=i)
    for layer1, layer2 in nx.utils.pairwise(layers):
        G.add_edges_from(itertools.product(layer1, layer2))
    return G

G = multilayered_graph(*subset_sizes)
color = [subset_color[data["layer"]] for v, data in G.nodes(data=True)]
pos = nx.multipartite_layout(G, subset_key="layer")

nx.draw(G, pos, node_color=color, with_labels=False)
plt.axis("equal")
plt.show()

คำอธิบาย

  • subset_sizes: จำนวนโหนดในแต่ละ Layer (8 Layers)
  • itertools.accumulate: คำนวณช่วง Index ของแต่ละ Layer
  • itertools.product: สร้าง Edge ทุกคู่ระหว่าง Layer ติดกัน
  • multipartite_layout: จัดวางโหนดในเส้นตรงแนวนอนตาม Layer

ผลลัพธ์

กราฟหลายชั้น แสดงโหนดจัดเรียงในแนวนอน 8 ชั้น สีต่างกัน ต่อกันระหว่างชั้นที่ติดกัน