如何在PyVis可视化的NetworkX图中显示节点属性?
在PyVis中显示图节点的自定义属性
我来帮你解决这个问题——默认情况下PyVis只会显示节点的ID(比如CHEBI:xxxx),但我们可以通过修改节点的label和title属性,让它展示你需要的节点信息(比如name或者完整的属性集合)。
解决方案代码
直接修改你的代码,添加节点属性的自定义逻辑:
import networkx as nx import obonet from pyvis.network import Network # 读取CHEBI本体并创建子图 G = obonet.read_obo('https://ftp.ebi.ac.uk/pub/databases/chebi/ontology/chebi_core.obo') H = nx.ego_graph(G, 'CHEBI:36464', 15) # 初始化PyVis网络 nt = Network('1500px', '1500px', notebook=True) # 从NetworkX导入图结构 nt.from_nx(H) # 遍历所有节点,自定义显示内容 for node in nt.nodes: # 获取原NetworkX节点的所有属性 nx_node_attrs = H.nodes[node['id']] # 把节点的name设为主要显示标签(替代默认的CHEBI ID) node['label'] = nx_node_attrs.get('name', node['id']) # 把所有属性拼接成多行文本,作为鼠标悬停时显示的提示 node['title'] = '\n'.join([f"{key}: {value}" for key, value in nx_node_attrs.items()]) # 生成可视化页面 nt.show('H.html')
代码说明
- 替换节点主标签:通过
node['label']设置,让节点显示name属性值,如果某个节点没有name,就 fallback 到原来的CHEBI ID。 - 添加悬停提示:
node['title']会在鼠标悬停节点时显示,这里把所有节点属性拼接成了易读的多行文本,你也可以根据需求只保留特定属性,比如只显示name和def:node['title'] = f"名称: {nx_node_attrs.get('name', '无')}\n定义: {nx_node_attrs.get('def', '无')}"
这样修改后,你的可视化图里节点会显示友好的名称,鼠标放上去还能看到完整的节点属性信息~
内容的提问来源于stack exchange,提问作者Soerendip
相关产品推荐
相关产品推荐

