вот моя целевая сеть, которую я хочу построить. График сети DiGraph с цветными краями Края имеют свой определенный цвет из цветовой карты.Цветовая карта связана с температурой каждого края.Так для:
номер края: 13 температура: 14 ° C → цвет края должен быть синим, но красным
номер края: 14 температура: 38 ° C → цвет края должен быть краснымно синий
Проблема в том, что я не получаю согласованного порядка краев или цвета ребер.Я не знаю, являются ли ребра или обработчики неупорядоченными.
Проблема уже описана в: https://networkx.github.io/documentation/latest/reference/classes/ordered.html Я использую Python 3.7.Либо nx.DiGraph (), либо nx.OrderedDiGraph () не получают правильный порядок.На самом деле нет ответа, как не допустить, чтобы networkx смешивал порядок ребер.Может ли кто-нибудь помочь мне?:)
Вот мой код, готовый к компиляции:
import networkx as nx
import matplotlib.pyplot as plt
# nodes input
nodes_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
nodes_x_y = [(1, 1.0), (2, 1.0), (3, 1.0), (4, 1.0), (5, 1.0), (2, 1.5), (3, 1.5), (4, 1.5),
(5, 1.5), (2, 2.0), (3, 2.0), (4, 2.0), (5, 2.0), (2, 2.5), (3, 2.5), (4, 2.5),
(5, 2.5), (1, 3.0), (2, 3.0), (3, 3.0), (4, 3.0), (5, 3.0)]
# edges input those should match together↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ those should match together
# edge labels
edges_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
# edge temperatures
edges_tp_forw = [35.0, 33.0, 33.0, 33.0, 24.0, 33.0, 33.0, 33.0, 24.0, 14.0, 38.0, 33.0, 24.0, 14.0, 38.0, 33.0, 40.0, 14.0, 38.0, 33.0, 40.0, 40.0, 38.0, 33.0]
# those should match together↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ those should match together
edges_u = [1, 2, 3, 4, 1, 6, 7, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 19, 15, 21, 18, 19, 20, 20]
edges_v = [0, 1, 2, 3, 5, 2, 3, 4, 9, 6, 11, 8, 13, 10, 15, 12, 18, 14, 20, 16, 17, 18, 19, 21]
# graph
G = nx.OrderedDiGraph()
# or: G = nx.DiGraph()
# Add network nodes
for k in nodes_id:
G.add_node(nodes_id[k], pos=nodes_x_y[k])
# Add network edges
for k in edges_id:
G.add_edge(edges_u[k], edges_v[k], edge_color=edges_tp_forw[k], name=edges_id[k], labels=edges_id[k])
# position
pos = nx.get_node_attributes(G, 'pos')
# open plot
f = plt.figure()
plt.axis('off')
# draw nodes
nx.draw_networkx_nodes(G, pos=pos, node_size=00, node_shape='o', node_color='grey', font_weight='bold')
# draw node labels
bbox = dict(facecolor='grey', edgecolor='grey', boxstyle='circle')
nx.draw_networkx_labels(G, dict(enumerate(nodes_x_y)), bbox=bbox, font_size=6)
# draw edges
max_value = max(edges_tp_forw)
# Heatmap color map
edge_cmap = plt.cm.get_cmap('coolwarm')
# draw edges
nx.draw_networkx_edges(G, pos, width=1, edge_color=edges_tp_forw, edge_cmap=edge_cmap, arrows=True)
# draw edge labels
edges_id = tuple(edges_id)
edges = tuple(zip(edges_u, edges_v))
edges_labels_id_tp = [pair for pair in zip(edges_id, edges_tp_forw)]
edges_draw_labels = dict(zip(edges, [elem for elem in edges_labels_id_tp]))
bbox = dict(facecolor='white', edgecolor='grey', boxstyle='round')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edges_draw_labels, bbox=bbox, font_size=6, rotate=False)
plt.show()
plt.close()