我正在使用类似于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'字段,会得到完全相同的结果。
我还尝试为每条边创建一个单独的跟踪,这可以解决关于将名称放在哪一行的混淆,但这导致我无处可去。
作为底线,我需要一种方法将(悬停)标签/文本放在连接两个点的线上。
答案 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]
。
奖励:为每个边缘设置单独的轨迹允许设置不同的宽度,例如与边缘重量成正比。