Plotly

时间:2017-09-04 13:14:34

标签: python plotly

我正在使用类似于example on the Plotly website的Plotly绘制图表。
除了图形节点上的悬停文本外,我还希望在边缘上有悬停文本。

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

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

使用'text'字段而不是'name'字段,会得到完全相同的结果。

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

1 个答案:

答案 0 :(得分:6)

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

这是一个适合我的代码

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']))

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

奖励:为每个边缘设置单独的轨迹允许设置不同的宽度,例如与边缘重量成正比。