如何用Python的Networkx等库可视化人员ID与技能ID组成的元组列表数据
实现方案
你手里的人员-技能关联元组是典型的二分网络结构,用NetworkX做可视化非常方便,也可以选择PyVis实现交互式效果,具体实现步骤如下:
1. 依赖安装
先安装需要的基础库:pip install networkx matplotlib
如果需要做交互式可视化,额外安装PyVis:pip install pyvis
2. 静态可视化(NetworkX + Matplotlib)
可以把人员、技能拆分为两类节点,分左右两列展示关联关系,直接可运行的示例代码如下:
import networkx as nx import matplotlib.pyplot as plt from networkx.algorithms import bipartite # 替换为你自己的元组列表即可 skill_edges = [ ("P1", "S1"), ("P1", "S2"), ("P2", "S2"), ("P3", "S1"), ("P3", "S3"), ("P4", "S2"), ("P4", "S3") ] # 初始化无向图并批量添加边 G = nx.Graph() G.add_edges_from(skill_edges) # 拆分两类节点 person_nodes = {n for n, _ in skill_edges} skill_nodes = {n for _, n in skill_edges} # 二分图专用布局,把人员节点统一放在左侧 pos = nx.bipartite_layout(G, person_nodes) # 区分绘制两类节点 nx.draw_networkx_nodes(G, pos, nodelist=person_nodes, node_color="#87CEEB", node_size=1500) nx.draw_networkx_nodes(G, pos, nodelist=skill_nodes, node_color="#FFA500", node_size=1500) # 绘制边和节点标签 nx.draw_networkx_edges(G, pos, edge_color="gray") nx.draw_networkx_labels(G, pos, font_size=10, font_weight="bold") # 隐藏坐标轴 plt.axis("off") plt.show()
3. 交互式可视化(PyVis)
如果需要支持拖拽、缩放、点击查看节点详情的效果,可以用PyVis实现:
from pyvis.network import Network skill_edges = [ ("P1", "S1"), ("P1", "S2"), ("P2", "S2"), ("P3", "S1"), ("P3", "S3"), ("P4", "S2"), ("P4", "S3") ] person_nodes = {n for n, _ in skill_edges} # 初始化网络画布 net = Network(notebook=False, height="700px", width="100%") # 给不同类型节点设置不同样式和悬浮提示 for n in person_nodes: net.add_node(n, color="#87CEEB", size=20, title=f"人员ID: {n}") for _, s in skill_edges: net.add_node(s, color="#FFA500", size=20, title=f"技能ID: {s}") # 添加关联边 for p, s in skill_edges: net.add_edge(p, s) # 生成html文件,打开即可交互操作 net.show("person_skill.html")
内容的提问来源于stack exchange,提问作者Shrief Nabil
相关产品推荐
相关产品推荐

