networkx 边缘颜色始终为黑色,颜色属性被忽略
networkx edge color is always black, color attribute is ignored
我有一些要表示的分析规则,我希望进出某些节点的边具有相同的颜色。我用不同的方法来处理它,但 none 的方法奏效了。例如:
G = nx.DiGraph()
color_map = []
color_iter = 0
edge_colors_iter = ["#4e79a9", "#59a14f", "#9c755f", "#f28e2b", "#edc948", "#bab0ac", "#e15759", "#b07aa1",
"#76b7b2", "#ff9da7"]
for index, row in rules.iterrows():
edges_to_add = []
color_of_rule = edge_colors_iter[color_iter]
#left_side_items and right_side_items are essentially lists for in and out edges
#of the certain node i need with the same color
# ...
for item in left_side_items:
edges_to_add.append((str(item), "R"+str(rule_id)))
for item in right_side_items:
edges_to_add.append(("R"+str(rule_id), str(item)))
G.add_edges_from(edges_to_add, color=color_of_rule)
color_iter += 1
for node in G:
if str(node).startswith("R"):
color_map.append('#f9dc4c')
else:
color_map.append('#339e34')
nx.draw_circular(G, node_color=color_map, with_labels=True)
plt.show()
我得到了正确的图表,但是颜色总是黑色,例如
显然nx.draw_circular没有考虑颜色属性,必须明确给出。
for item in left_side_items:
G.add_edge(str(item), "R"+str(rule_id), color=color_of_rule)
for item in right_side_items:
G.add_edge("R"+str(rule_id), str(item), color=color_of_rule)
color_iter += 1
将颜色添加到每条边后,您可以将它们放入一个列表中,该列表将传递给 draw_circular。
edges = G.edges()
colors = [G[u][v]['color'] for u, v in edges]
nx.draw_circular(G, edge_color=colors, node_size=final_node_sizes, node_color=color_map, with_labels=True)
plt.show()
您可以在指定所需颜色的地方传递关键字参数 edge_color
。
示例:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(n=6)
color_map = []
for u, v in G.edges():
if u % 2 == 0 and v % 2 == 0:
color_map.append('#f9dc4c')
else:
color_map.append('#339e34')
nx.draw_circular(G, edge_color=color_map, with_labels=True)
plt.show()
我有一些要表示的分析规则,我希望进出某些节点的边具有相同的颜色。我用不同的方法来处理它,但 none 的方法奏效了。例如:
G = nx.DiGraph()
color_map = []
color_iter = 0
edge_colors_iter = ["#4e79a9", "#59a14f", "#9c755f", "#f28e2b", "#edc948", "#bab0ac", "#e15759", "#b07aa1",
"#76b7b2", "#ff9da7"]
for index, row in rules.iterrows():
edges_to_add = []
color_of_rule = edge_colors_iter[color_iter]
#left_side_items and right_side_items are essentially lists for in and out edges
#of the certain node i need with the same color
# ...
for item in left_side_items:
edges_to_add.append((str(item), "R"+str(rule_id)))
for item in right_side_items:
edges_to_add.append(("R"+str(rule_id), str(item)))
G.add_edges_from(edges_to_add, color=color_of_rule)
color_iter += 1
for node in G:
if str(node).startswith("R"):
color_map.append('#f9dc4c')
else:
color_map.append('#339e34')
nx.draw_circular(G, node_color=color_map, with_labels=True)
plt.show()
我得到了正确的图表,但是颜色总是黑色,例如
显然nx.draw_circular没有考虑颜色属性,必须明确给出。
for item in left_side_items:
G.add_edge(str(item), "R"+str(rule_id), color=color_of_rule)
for item in right_side_items:
G.add_edge("R"+str(rule_id), str(item), color=color_of_rule)
color_iter += 1
将颜色添加到每条边后,您可以将它们放入一个列表中,该列表将传递给 draw_circular。
edges = G.edges()
colors = [G[u][v]['color'] for u, v in edges]
nx.draw_circular(G, edge_color=colors, node_size=final_node_sizes, node_color=color_map, with_labels=True)
plt.show()
您可以在指定所需颜色的地方传递关键字参数 edge_color
。
示例:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.complete_graph(n=6)
color_map = []
for u, v in G.edges():
if u % 2 == 0 and v % 2 == 0:
color_map.append('#f9dc4c')
else:
color_map.append('#339e34')
nx.draw_circular(G, edge_color=color_map, with_labels=True)
plt.show()