Plotly中的线路悬停文本

gev*_*vra 5 python plotly

我正在使用Plotly绘制一个类似于Plotly网站上的示例的图表.
除了图形节点上的悬停文本,我还希望在边缘上有悬停文本.

我尝试通过添加"名称"字段来修改边缘的跟踪对象来实现此目的,但这不起作用并且在节点上放置"名称".

trace3=Scatter(
    x=Xed,
    y=Yed,
    name="my_hover_text",
    mode='lines',
    line=Line(color='rgb(210,210,210)', width=1),
    hoverinfo='name'
)
Run Code Online (Sandbox Code Playgroud)

使用"文本"字段而不是"名称"字段,可以得到完全相同的结果.

我还尝试为每个边缘设置一个单独的跟踪,这可以解决关于将名称放在哪里的混淆,但这导致我无处可去.
作为底线,我需要一种方法将(悬停)标签/文本放在连接两个点的线上.

gev*_*vra 6

一个快速的解决方案/黑客是在Maximilian在评论中提到的社区论坛页面上关注etienne的想法.
我们的想法是在每一行上插入一个透明节点,并用悬停文本标签对其进行注释.

这是一个适合我的代码

trace3_list = []
middle_node_trace = go.Scatter(
    x=[],
    y=[],
    text=[],
    mode='markers',
    hoverinfo='text',
    marker=go.Marker(
        opacity=0
    )
)
for edge in G.edges(data=True):
    trace3=Scatter(
        x=[],
        y=[],
        mode='lines',
        line=Line(color='rgb(210,210,210)', width=edge[2]['weight']),
        hoverinfo='none'
    )
    x0, y0 = G.node[edge[0]]['pos']
    x1, y1 = G.node[edge[1]]['pos']
    trace3['x'] += [x0, x1, None]
    trace3['y'] += [y0, y1, None]
    trace3_list.append(trace3)

    middle_node_trace['x'].append((x0+x1)/2)
    middle_node_trace['y'].append((y0+y1)/2)
    middle_node_trace['text'].append(str(edge[2]['weight']))
Run Code Online (Sandbox Code Playgroud)

然后只绘制所有的痕迹,即[*trace3_list, middle_node_trace].

奖励:每个边缘具有单独的迹线允许设置不同的宽度,例如与边缘重量成比例.