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

如何用Python NetworkX与Plotly实现边的鼠标悬停文本显示

修复Plotly网络图边的悬停文本失效问题

你的问题出在边的文本列表结构和坐标列表不匹配:

  • 当前edge_x是按[x0, x1, None, x0', x1', None,...]格式生成的,每条边对应3个元素
  • 但你给edge_trace.text的是和edge_x长度一致但元素独立的文本,Plotly无法识别哪些文本对应哪条边

修复方案

生成边的文本列表时,要和坐标列表的结构完全对齐:每条边对应**[自定义文本, 自定义文本, None]**,这样鼠标悬停在任意一段边上时,都会显示对应的文本。

完整修复代码

import networkx
import plotly.graph_objects as go

G = networkx.random_geometric_graph(n=3, radius=1)

# Create Edges
edge_x, edge_y = [], []
# 先收集每条边的自定义文本,比如用两个节点ID标识
edge_texts = []
for idx0, idx1 in G.edges():
    x0, y0 = G.nodes[idx0]["pos"]
    x1, y1 = G.nodes[idx1]["pos"]
    edge_x.extend([x0, x1, None])
    edge_y.extend([y0, y1, None])
    # 定义这条边的悬停文本
    edge_text = f"边: {idx0} → {idx1}"
    # 对应坐标的三个元素,重复文本+None
    edge_texts.extend([edge_text, edge_text, None])

edge_trace = go.Scatter(
    x=edge_x, y=edge_y, line=dict(width=10, color='#888'), mode='lines',
    hoverinfo='text',
)
# 替换成对齐结构的文本列表
edge_trace.text = edge_texts

# Create Nodes with TEXT
node_x = []
node_y = []
nodes_o = G.nodes
nodes_ids = list(nodes_o)
for node in nodes_ids:
    x, y = G.nodes[node]["pos"]
    node_x.append(x)
    node_y.append(y)

node_trace = go.Scatter(x=node_x, y=node_y, mode="markers", hoverinfo="text",
                        marker=dict(color=[], size=50, line_width=10))
node_trace.text = [f"TEXT{idx}" for idx, _ in G.adjacency()]

# Create Network Graph
fig = go.Figure(
    data=[edge_trace, node_trace],
    layout=go.Layout(),
)
fig.show()

关键改动说明

  • 新增edge_texts列表,每条边对应的三个元素(文本、文本、None)和坐标列表的结构严格对应
  • 替换原来错误的edge_trace.text赋值逻辑,确保文本和边的坐标段一一绑定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:31:37