2017-09-04 61 views
2

我正在繪製一個類似於example on the Plotly website的圖表。
除了圖形節點上的懸停文本外,我還希望在邊上也有懸停文本。線條懸停在Plotly中的文本

我試圖通過添加'name'字段來修改邊緣的跟蹤對象來實現這一目的,但是這並沒有起作用,並且正在將'name'放在節點上。

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'字段,給出了非常相同的結果。

我也嘗試過爲每個邊緣分別繪製一條曲線,這應該解決關於將名稱放在哪裏的困惑,但是這不會引導我。
作爲底線,我需要一種方法將(懸停)標籤/文本放在連接兩點的線上。

+2

這不是目前不可能的:https://community.plot.ly/t/plotly-hover-event-not-getting-triggered-for-al-data-points/387 –

+1

謝謝@MaximilianPeters!按照艾蒂安的想法,將透明節點放在線上並使用懸停文本對其進行註釋,我就做到了這一點。我會很快發佈一些代碼 – gevra

回答

3

一個快速解決方案/黑客是遵循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]代碼。

獎勵:每條邊有一個單獨的軌跡允許設置不同的寬度,例如,與邊緣重量成正比。