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
要绘制有向加权图,可以使用Python中的networkx库。下面是使用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()
解释:
- 首先导入networkx库和matplotlib.pyplot库。
- 创建一个有向加权图G。
- 使用add_nodes_from()方法添加节点,这里有8个节点。
- 使用add_weighted_edges_from()方法添加边和权重,使用zip()函数将边和权重进行打包。
- 使用spring_layout()方法确定节点的位置。
- 使用draw()方法绘制图形,设置参数with_labels=True表示显示节点的标签,设置node_size表示节点的大小,设置node_color表示节点的颜色,设置font_size和font_weight表示节点标签的字体大小和字体粗细。
- 使用get_edge_attributes()方法获取边的权重,使用draw_networkx_edge_labels()方法添加边的权重。
- 使用plt.show()显示图形。
运行以上代码,将会绘制出一个有向加权图,其中每个节点表示一个景点,边表示景点之间的距离,边的标签表示距离的权重。
原文地址: https://www.cveoy.top/t/topic/iPF4 著作权归作者所有。请勿转载和采集!