NetworkX绘图:如何按余弦相似度区分边色并设置短节点标签
NetworkX绘图问题解决方案
你的边列表来源数据框示意图:
按余弦相似度设置边颜色
不需要修改原始图结构,只需要在绘图前遍历所有边,根据边存储的CosineSimilarity属性逐一生成对应颜色值,把颜色列表传给draw_networkx的edge_color参数即可。阈值判断逻辑可自行调整,颜色值支持十六进制色值、RGB元组、matplotlib内置颜色名等格式。
设置自定义短节点标签
绘图时不需要修改原始节点存储的长句内容,只要提前构造「原始节点名: 待显示短标签」的映射字典,传给draw_networkx的labels参数,就会在绘图时自动替换显示为你设置的短文本。你可以选择自动给节点生成序号标签,也可以手动给每个节点指定自定义的短名称。
完整参考代码
import networkx as nx # 保留你原有的建图逻辑 G_test = nx.from_pandas_edgelist( n1, 'Sentence0', 'Sentence1', edge_attr='CosineSimilarity', create_using=nx.Graph() ) pos = nx.spring_layout(G_test) # 生成边颜色列表 edge_color_list = [] for _, _, edge_attr in G_test.edges(data=True): # 相似度<0.5的边设为浅灰色,其余设为深蓝色,可按需替换颜色值 if edge_attr['CosineSimilarity'] < 0.5: edge_color_list.append('#d0d0d0') else: edge_color_list.append('#2563eb') # 生成节点短标签映射 # 自动编号方案:按节点遍历顺序生成N0、N1...格式的标签 custom_labels = {node: f"N{i}" for i, node in enumerate(G_test.nodes())} # 手动指定方案示例(按需替换成你自己的映射关系即可): # custom_labels = { # "原始长句子文本1": "句1", # "原始长句子文本2": "句2" # } # 传入自定义参数绘图 nx.draw_networkx( G_test, pos=pos, with_labels=True, labels=custom_labels, edge_color=edge_color_list, node_size=280, font_size=8 )
补充提示:如果需要实现相似度越高边颜色越深的连续渐变效果,可以直接把所有边的余弦相似度值组成列表传入
edge_color,同时搭配edge_cmap参数指定对应色阶即可,不需要手动写阈值判断。
内容的提问来源于stack exchange,提问作者LikeCoding
相关产品推荐
相关产品推荐

