如何基于矩阵在Python中绘制关系图?Excel矩阵导入Gephi失败如何解决
加权邻接矩阵关系图Python实现方案
你给出的是6×6无向加权邻接矩阵,可通过networkx+matplotlib组合实现可视化,操作步骤如下:
1 前置依赖安装
执行以下命令安装所需工具库:
pip install pandas networkx matplotlib openpyxl
其中openpyxl仅用于读取xlsx格式的Excel文件,如果你用的是xls格式可替换为xlrd。
2 代码实现
2.1 直接使用提供的矩阵绘图
import networkx as nx import matplotlib.pyplot as plt import numpy as np # 输入给定的邻接矩阵 adj_matrix = np.array([ [0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 0], [1, 0, 1, 0, 1, 2], [0, 0, 0, 1, 0, 1], [0, 0, 0, 2, 1, 0] ]) # 创建无向加权图 G = nx.from_numpy_array(adj_matrix) # 设置绘图布局,可选circular_layout、kamada_kawai_layout等 pos = nx.spring_layout(G, seed=42) # seed固定布局避免每次运行图位置变化 # 绘制节点 nx.draw_networkx_nodes(G, pos, node_size=700, node_color='lightblue') # 绘制节点标签(默认从0开始编号,对应矩阵的行/列序号) nx.draw_networkx_labels(G, pos, font_size=12) # 绘制边,宽度对应权重大小 edges = G.edges(data=True) nx.draw_networkx_edges(G, pos, edgelist=edges, width=[d['weight']*2 for (u,v,d) in edges]) # 绘制边权重标签 nx.draw_networkx_edge_labels(G, pos, edge_labels={(u,v):d['weight'] for (u,v,d) in edges}) # 关闭坐标轴 plt.axis('off') plt.show()
2.2 从Excel文件读取矩阵绘图
如果你的矩阵保存在Excel里,只需要把上述代码中adj_matrix的定义部分替换为以下代码即可:
import pandas as pd # 替换为你的Excel文件路径,header=None表示Excel里没有表头行,index_col=None表示没有行索引列 # 如果你的矩阵第一行是列名、第一列是行名,自行删除header和index_col参数即可 df = pd.read_excel('你的矩阵文件路径.xlsx', header=None, index_col=None) adj_matrix = df.values
3 常见调整项
- 更换布局:把
spring_layout替换为circular_layout可得到环形排布的节点图,替换为kamada_kawai_layout可得到节点分布更均匀的图 - 调整样式:修改
node_color、node_size、edge_color等参数可自定义图形样式 - 导出图片:把
plt.show()替换为plt.savefig('关系图.png', dpi=300, bbox_inches='tight')可直接导出高清图片
内容的提问来源于stack exchange,提问作者user12217822
相关产品推荐
相关产品推荐

