You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

graph_tool使用add_edge_list导入边数据后如何设置顶点文本标签

解决方案

你现有代码返回的vmap已经包含了所有顶点和原始文本名称的映射关系,不需要手动处理节点添加顺序,也不需要提前手动添加顶点,直接用这个映射即可设置顶点标签:

from graph_tool.all import *

g = Graph()
eweight = g.new_ep('double')
# 返回的vmap是VertexPropertyMap类型,每个顶点对应的属性值就是原始的文本节点名
vmap = g.add_edge_list(df.values, eprops=[eweight], hashed=True)

# 绘图时直接指定vertex_text为vmap即可显示文本标签,也可以单独存为label属性方便后续调用
graph_draw(g, 
           vertex_text=vmap, 
           vertex_font_size=12,
           edge_pen_width=eweight, # 用权重设置边粗细,不需要可以删掉
           output="network.png")

疑问解答

1. 是否需要先手动添加所有顶点再导入边?

不需要。hashed=True时add_edge_list会自动对所有出现的源/目标节点去重,依次添加为新顶点,返回的vmap已经自动完成了顶点对象和原始文本ID的映射,不需要你自行匹配顺序。
只有当你需要提前给部分顶点设置自定义属性、或者要保留指定的顶点排序时,才需要提前手动添加顶点。

2. 导入边时能否正确识别已有的顶点名称标签?

可以。hashed参数除了布尔值外,还支持直接传入提前创建好的存储节点名称的顶点属性,add_edge_list会自动用这个属性的值匹配已有顶点,不会重复创建:

g = Graph()
# 提前创建存储节点名称的顶点属性
vname = g.new_vp('string')
# 从数据框中提取去重后的所有节点列表
node_list = pd.unique(pd.concat([df['id_source'], df['id_target']]))
for name in node_list:
    v = g.add_vertex()
    vname[v] = name

# 导入边时传入vname作为哈希匹配依据,会自动匹配已有顶点
eweight = g.new_ep('double')
g.add_edge_list(df.values, eprops=[eweight], hashed=vname)

内容的提问来源于stack exchange,提问作者EFL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:27:03