Networkx: 如何绘制彩色边?
我用下面的代码创建了一个图:
G = networkx.Graph()
G.add_edges_from([list(e) for e in P + Q + R])
colors = "bgrcmyk"
color_map = [colors[i] for i in range(n/2)]
# add colors
for i in range(len(P)):
edge = list(P[i])
G[edge[0]][edge[1]]['edge_color'] = color_map[i]
for i in range(len(P)):
edge = list(Q[perms[0][i]])
G[edge[0]][edge[1]]["color"] = color_map[perms[0][i]]
for i in range(len(P)):
edge = list(R[perms[1][i]])
G[edge[0]][edge[1]]["color"] = color_map[perms[1][i]]
然后我用以下代码来显示它:
networkx.draw(G)
matplotlib.pyplot.show()
显示得很好,只是所有的边都是黑色的,而不是我在上面的代码中想要设置的颜色。有没有什么想法?
3 个回答
1
文档说明如下:
edge_color:颜色字符串或浮点数组
边的颜色。可以是一个单一的颜色格式字符串(默认是'r'),
也可以是一个颜色序列,长度要和边的列表相同。
如果指定了数字值,它们会通过edge_cmap和edge_vmin、edge_vmax这几个参数映射到颜色上。
7
你可以不需要在循环中画边。这样在处理更大的图时会更快。
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
# example graph
for color in "bgrcmyk":
G.add_edge('s'+color,'t'+color, color=color)
# edge_color_attr = nx.get_edge_attributes(G,'color')
# edges = edge_color_attr.keys()
# colors = edge_color_attr.values()
edges,colors = zip(*nx.get_edge_attributes(G,'color').items())
nx.draw(G,edgelist=edges,edge_color=colors,width=10)
plt.show()
2
嗯,我终于找到了我需要做的事情。颜色显然需要分开,而且网络需要用 draw_networkx
来绘制。所以上面的三个 for
循环要用以下内容替换:
pos=networkx.spring_layout(G)
for i in range(len(P)):
networkx.draw_networkx_edges(G,pos,
edgelist=[list(P[i]), list(Q[perms[0][i]]), list(R[perms[1][i]])],edge_color=color_map[i], width="8")