2012-04-11 374 views
10

我想爲圖形添加邊緣標籤。這一切運作良好,唯一的問題是當兩條邊交叉時 - 我只看到其中一個標籤,因爲它們碰巧重疊。如何設置NetworkX邊緣標籤偏移量? (以避免標籤重疊)

example

正如你可以看到hphob-α的標籤顯示,但極性測試版的標籤不顯示(我的猜測是,它是對下前面提到的)。

我找不到有關如何重新定位標籤的任何文檔,任何建議如何設置某種偏移來移動標籤?用於生成圖形

代碼:

try: 
    import matplotlib.pyplot as plt 
except: 
    raise 

import networkx as nx 

G=nx.Graph() 

a="hphob" 
b="polarity" 
c="alpha" 
d="beta" 
G.add_edge(a,b,weight=0.5) 
G.add_edge(b,c,weight=0.5) 
G.add_edge(c,d,weight=0.5) 
G.add_edge(a,d,weight=0.5) 
G.add_edge(a,c,weight=0.5) 
G.add_edge(b,d,weight=0.5) 

pos=nx.spring_layout(G) # positions for all nodes 

# nodes 
nx.draw_networkx_nodes(G,pos,node_size=7000, node_color="white") 

# edges 
nx.draw_networkx_edges(G,pos, 
     width=6,alpha=0.5,edge_color='black') 


# labels 
nx.draw_networkx_labels(G,pos,font_size=20,font_family='sans-serif') 

nx.draw_networkx_edge_labels(G,pos, 
    { 
     (a,b):"x", (b,c):"y", (c,d):"w", (a,d):"z", (a,c):"v", (b,d):"r" 
    } 
) 

plt.axis('off') 
plt.savefig("weighted_graph.png") # save as png 
plt.show() # display 

回答

9

我用NetworkX的1.6版本,在那裏我可以提交label_posdraw_networkx_edge_labels()。默認情況下,它被設置爲0.5,但使用您的例子,它設置爲0.3,我得到以下結果: Weighted graph with edge labels shifted

nx.draw_networkx_edge_labels(G,pos, 
    { 
     (a,b):"x", (b,c):"y", (c,d):"w", (a,d):"z", (a,c):"v", (b,d):"r" 
    }, 
    label_pos=0.3 
) 

Here are the details

+0

我剛纔它被包括看見[文檔中的版本1.6](http://networkx.lanl.gov/reference/generated/networkx.drawing.nx_pylab.draw_networkx_edge_labels.html)。 – Maehler 2012-04-11 11:39:12

+0

另一個好處是邊緣可以有多個標籤,並且可以定位在這些不同的偏移處。 – Vikram 2013-06-27 08:05:32