Окраска краев по весу в сетиx
Я нашел только что-то похожее на то, что я хочу здесь:
Однако я не могу применить это к моей проблеме. У меня есть график с взвешенными ребрами, но веса не уникальны (поэтому есть как 15 ребер с весом 1). Я хочу покрасить края в зависимости от их веса, чем меньше вес, тем светлее цвет.
Я пытался применить метод, предложенный в приведенном выше вопросе, но, насколько я понимаю, для этого требуется, чтобы веса были уникальными для каждого ребра?
До сих пор я создавал список в порядке возрастания различных весов ребер и хотел использовать его для классификации возможных цветов ребер. Я стараюсь не рисовать края по весу, так как в будущем мне может понадобиться нарисовать очень большой график с огромным диапазоном веса по краям.
Если неясно, дайте мне знать в комментариях, и я дам более конкретную информацию.
Спасибо!
РЕДАКТИРОВАТЬ: def draw_graph (target): nlist = [target] + G.neighbors (target) H = nx.subgraph (G, nlist) n = H.number_of_edges () colors = range (n) label, weights = 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