Python 绘制有向加权图:景点距离可视化

假设我们有一组景点,它们之间的距离可以用一个矩阵表示,如下所示:

[[0, 300, 360, 210, 530, 475, 500, 690],
 [300, 0, 380, 270, 230, 285, 200, 390],
 [360, 380, 0, 510, 230, 665, 490, 680],
 [210, 270, 510, 0, 470, 265, 450, 640],
 [530, 230, 230, 470, 0, 515, 260, 450],
 [475, 285, 665, 265, 515, 0, 460, 650],
 [500, 200, 490, 450, 260, 460, 0, 190],
 [690, 390, 680, 640, 450, 650, 190, 0]]

每一行代表从一个景点到其他所有景点的距离。我们想使用 Python 的 networkx 库来绘制一个有向加权图,直观地展示这些景点之间的距离关系。

代码实现

import networkx as nx
import matplotlib.pyplot as plt

# 创建有向加权图
G = nx.DiGraph()

# 添加节点
G.add_nodes_from(range(8))

# 添加边和权重
edges = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7),
         (1, 0), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),
         (2, 0), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7),
         (3, 0), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (3, 7),
         (4, 0), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (4, 7),
         (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7),
         (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 7),
         (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6)]

weights = [300, 360, 210, 530, 475, 500, 690,
           300, 380, 270, 230, 285, 200, 390,
           360, 380, 510, 230, 665, 490, 680,
           210, 270, 510, 470, 265, 450, 640,
           530, 230, 230, 470, 515, 260, 450,
           475, 285, 665, 265, 515, 460, 650,
           500, 200, 490, 450, 260, 460, 190,
           690, 390, 680, 640, 450, 650, 190]

G.add_weighted_edges_from(zip(edges, weights))

# 绘制图形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=1000, node_color='lightblue', font_size=10, font_weight='bold')

# 添加边的权重
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)

plt.show()

代码解释

  1. 导入库: 首先,导入 networkxmatplotlib.pyplot 库。
  2. 创建图: 使用 nx.DiGraph() 创建一个有向加权图 G
  3. 添加节点: 使用 G.add_nodes_from(range(8)) 添加 8 个节点,节点编号从 0 到 7。
  4. 添加边和权重: 使用 G.add_weighted_edges_from(zip(edges, weights)) 添加边和权重。
    • edges 列表包含所有景点之间的连接关系,例如 (0, 1) 代表从景点 0 到景点 1 的连接。
    • weights 列表对应 edges 中每条边的权重,即景点之间的距离。
  5. 确定节点位置: 使用 nx.spring_layout(G) 确定每个节点在图形中的位置, spring_layout 可以自动计算节点的位置,使它们之间保持一定的距离。
  6. 绘制图形: 使用 nx.draw(G, pos, ...) 绘制图形,设置一些参数来控制图形的外观,例如:
    • with_labels=True: 显示节点标签。
    • node_size: 节点的大小。
    • node_color: 节点的颜色。
    • font_sizefont_weight: 节点标签的字体大小和粗细。
  7. 添加边权重: 使用 nx.draw_networkx_edge_labels(G, pos, edge_labels=labels) 在图中添加边权重。
    • labels = nx.get_edge_attributes(G, 'weight') 获取所有边的权重并存储在 labels 字典中。
  8. 显示图形: 使用 plt.show() 显示绘制好的图形。

运行结果

运行代码后,将会生成一个有向加权图,每个节点代表一个景点,每个节点之间的连接线代表景点之间的距离,连接线上的数字表示距离的权重。

通过这个可视化结果,我们可以清晰地看到景点之间的距离关系,方便我们制定旅游路线或者进行其他相关分析。

Python 绘制有向加权图:景点距离可视化

原文地址: https://www.cveoy.top/t/topic/fPRd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录