This answer演示了如何使用以下代码绘制具有自定义颜色和边缘粗细的图形:
import networkx as nx
G = nx.Graph()
G.add_edge(1,2,color='r',weight=2)
G.add_edge(2,3,color='b',weight=4)
G.add_edge(3,4,color='g',weight=6)
pos = nx.circular_layout(G)
edges = G.edges()
colors = [G[u][v]['color'] for u,v in edges]
weights = [G[u][v]['weight'] for u,v in edges]
nx.draw(G, pos, edges=edges, edge_color=colors, width=weights)
但是,假设我想绘制一个多图形,如:
G = nx.MultiGraph()
G.add_edge(1,2,color='r',weight=2)
G.add_edge(1,2,color='b',weight=3)
G.add_edge(2,3,color='r',weight=4)
G.add_edge(2,3,color='b',weight=6)
调用类似抽奖的内容应该总共得到三分。第1点和第2点应该两者它们之间的红线和蓝线,类似地,2和3也应该两者它们之间的红线和蓝线。
这对多图不起作用,因为多边需要不同的存储技术。有没有相对简单的方法呢?
另外,我认为此question and answer不适用。提问者使用MultiGraph
对象,但实际图形不是多图。解决方案是选择第一个(在他的情况下,仅限于)边缘。然而,在这种情况下,在绘制阶段需要两个边缘。
有没有办法在networkx中用不同的颜色和权重绘制多条边?
答案 0 :(得分:2)
您只需要以不同的方式访问多图的边缘
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.MultiGraph()
G.add_edge(1,2,color='r',weight=8)
G.add_edge(1,2,color='b',weight=3)
G.add_edge(2,3,color='r',weight=4)
G.add_edge(2,3,color='c',weight=6)
pos = nx.circular_layout(G)
edges = G.edges()
colors = []
weight = []
for (u,v,attrib_dict) in list(G.edges.data()):
colors.append(attrib_dict['color'])
weight.append(attrib_dict['weight'])
nx.draw(G, pos, edges=edges, edge_color=colors, width=weight, )
plt.show()
这是边缘的另一种组合
G = nx.MultiGraph()
G.add_edge(1,2,color='r',weight=2)
G.add_edge(1,2,color='b',weight=3)
G.add_edge(2,3,color='r',weight=4)
G.add_edge(2,3,color='b',weight=6)
您可以阅读有关访问多图边here的更多信息。