2014-07-21 1332 views
0

我在如何在這裏爲特定邊添加顏色而掙扎。比方說,我希望從邊緣到邊緣都有藍色,而不必重寫其他egdes?另外,我想知道如果我們可以有一個箭頭從一個節點指向另一個,而不是直線的邊緣?python networkX爲特定邊添加顏色

最佳

皮特

import networkx as nx 
import matplotlib.pyplot as plt 

G = nx.Graph() 
class obj(object): 
    def __init__(self,N,P): 
     self.N = N 
     self.P = P 
one = obj(1,0.5) 
two = obj(2,0.4) 
three = obj(3,0.3) 
four = obj(4,0.2) 
G.add_node(one.N) 
G.add_node(two.N) 
G.add_node(three.N) 
G.add_node(four.N) 

G.add_edge(one.N,two.N) 
G.add_edge(two.N,three.N) 
G.add_edge(two.N,four.N) 
G.add_edge(four.N,one.N) 

nx.draw(G) 
plt.show() 

回答

1

可以繪製與使用edge_color參數networkx.draw不同顏色的邊緣。下面是一個例子,您將第一條邊緣(1,2)設爲紅色,並通過傳遞列出每條邊的顏色的「邊緣顏色元組」來使其他邊成爲藍色。在這個例子中,第一個邊是紅色的,而其他的是藍色的。

nx.draw(G, pos=pos, edge_color=('r', 'b', 'b', 'b')) 

example drawing

如果你想對邊緣箭頭,你可以使用一個DiGraph(有向圖)。所有你必須改變的是:

G = nx.DiGraph() 

然後你的邊緣將被定向。

example-drawing-directed

如果你想要的箭頭在兩個方向點,你就必須添加的每個邊緣在每個方向和更新的邊緣顏色的元組(因爲現在你有兩倍多邊緣):

# Add edges in each direction 
G.add_edge(one.N,two.N) 
G.add_edge(two.N,one.N) 
G.add_edge(two.N,three.N) 
G.add_edge(three.N,two.N) 
G.add_edge(two.N,four.N) 
G.add_edge(four.N,two.N) 
G.add_edge(four.N,one.N) 
G.add_edge(one.N, four.N) 

# Draw the graph 
pos = nx.spring_layout(G) 
nx.draw(G, pos=pos, edge_color=('r', 'b', 'r', 'b', 'b', 'b', 'b', 'b')) 

example-drawing-directed-both-ways

相關問題