簡體   English   中英

在網絡x中按重量着色邊緣

[英]Colouring edges by weight in networkx

我只發現了類似於我想要的東西:

基於重量着色網絡x邊緣

但是,我似乎無法將此應用於我的問題。 我有一個帶加權邊的圖,但權重不是唯一的(所以有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM