[英]Colouring edges by weight in networkx
我只發現了類似於我想要的東西:
但是,我似乎無法將此應用於我的問題。 我有一個帶加權邊的圖,但權重不是唯一的(所以有15個邊有權重1)。 我想根據它們的重量為我的邊緣着色,重量越低,顏色越淺。
我嘗試應用上述問題中建議的方法,但據我所知,這要求權重在每個邊緣都是唯一的?
到目前為止,我已經按照不同邊緣權重的升序生成了一個列表,並希望使用它來對可能的邊緣顏色進行分類。 我試圖避免按重量繪制邊緣,因為我可能需要繪制一個非常大的圖形,邊緣上有很大的權重范圍。
如果不清楚,請在評論中告訴我,我會提供更具體的信息。
謝謝!
編輯:def draw_graph(目標):nlist = [目標] + G.鄰居(目標)H = nx.subgraph(G,nlist)n = H.number_of_edges()顏色=范圍(n)標簽,權重= colour_and_label_edges(H )
pos = nx.spring_layout(H)
nx.draw(H, pos, node_color='#A0CBE2',edge_color=colours, node_size=100, edge_cmap=plt.cm.Blues, width=0.5, with_labels=False)
nx.draw_networkx_edge_labels(H, pos, edge_labels=labels)
plt.savefig("Graphs/edge_colormap_%s.png" % target) # save as png
plt.show() # display
pass
def colour_and_label_edges(graph):
d={}
for (u,v) in graph.edges():
d[u,v]=graph[u][v]['weight']
temp=[]
for val in d.values():
if val not in temp:
temp.append(val)
weights = sorted(temp,key=int)
return d, weights
上面的代碼不完整,但想法是函數給我一個權重列表,如下:
[1,2,3,4,5,6,9,10,16,21,47,89,124,134,224]
然后,我想使用此列表為每個重量分配顏色,重量越高顏色越深。 (我在這個例子中使用了一個非常小的子圖,相對於數據集)。 希望能稍微清理一下:S
您可以使用邊權重和顏色圖來繪制它們。 您可能需要與下面的顏色圖不同的顏色圖。
import matplotlib.pyplot as plt
import networkx as nx
import random
G = nx.gnp_random_graph(10,0.3)
for u,v,d in G.edges(data=True):
d['weight'] = random.random()
edges,weights = zip(*nx.get_edge_attributes(G,'weight').items())
pos = nx.spring_layout(G)
nx.draw(G, pos, node_color='b', edgelist=edges, edge_color=weights, width=10.0, edge_cmap=plt.cm.Blues)
plt.savefig('edges.png')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.