我在这里只找到了与我想要的类似的东西:
根据权重对网络边缘进行着色 https://stackoverflow.com/questions/17632151/coloring-networkx-edges-based-on-weight
但是我似乎无法将其应用于我的问题。我有一个带有加权边的图,但权重不是唯一的(因此大约有 15 个权重为 1 的边)。我想根据边缘的重量对边缘进行着色,重量越低,颜色越浅。
我尝试应用上述问题中建议的方法,但据我了解,这要求每条边上的权重都是唯一的?
到目前为止,我已经按照不同边缘权重的升序生成了一个列表,并想用它来对可能的边缘颜色进行分类。我试图避免按权重绘制边缘,因为将来我可能需要绘制一个非常大的图形,并且边缘上的权重范围很大。
如果不清楚,请在评论中告诉我,我会提供更具体的信息。
Thanks!
编辑:
def draw_graph(目标):
nlist = [目标]+G.neighbors(目标)
H=nx.子图(G, nlist)
n=H.number_of_edges()
颜色 = 范围(n)
标签,权重 = color_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