import numpy as npimport networkx as nximport matplotlib.pyplot as plt# 1. 定义目标 3阶矩阵 (邻接矩阵)# 行/列索引对应节点 0, 1, 2 (为了编程方便,通常从0开始,对应之前的1,2,3)A = np.array([ [0.5, 1.0, 0.0], [0.2, 0.0, 0.8], [0.0, 1.8, 0.0]])# 2. 创建有向图对象G = nx.DiGraph()# 3. 从矩阵构建图n = A.shapenodes = list(range(n[0]))G.add_nodes_from(nodes)# 遍历矩阵,添加带权重的边for i in range(n[0]): for j in range(n[0]): weight = A[i][j] if weight > 0: # 只添加非零权重的边 G.add_edge(i, j, weight=weight)# 4. 设置布局 (Spring layout 能自动优化节点位置,避免重叠)pos = nx.spring_layout(G, seed=42, k=2) # k值调整节点间距# 5. 绘制图形plt.figure(figsize=(10, 8))# 绘制节点nx.draw_networkx_nodes(G, pos, node_size=1500, node_color='lightblue', edgecolors='black')# 绘制节点标签 (这里用 1, 2, 3 对应之前的习惯,实际代码中是 0, 1, 2)labels = {0: "Node 1", 1: "Node 2", 2: "Node 3"}nx.draw_networkx_labels(G, pos, labels=labels, font_size=12, font_weight='bold')# 绘制边 (带箭头)nx.draw_networkx_edges(G, pos, arrowstyle='-|>', arrowsize=20, edge_color='gray', width=2)# 获取边的权重并绘制权重标签edge_labels = nx.get_edge_attributes(G, 'weight')# 格式化权重显示,保留一位小数formatted_labels = {k: f"{v:.1f}" for k, v in edge_labels.items()}nx.draw_networkx_edge_labels(G, pos, edge_labels=formatted_labels, font_color='red', font_size=10)plt.title("Visualization of 3x3 Adjacency Matrix as a Directed Graph")plt.axis('off') # 关闭坐标轴plt.show()