Python NetworkX二分体颜色混淆顺序

Python NetworkX二分体颜色混淆顺序,python,networkx,bipartite,Python,Networkx,Bipartite,我已经使用NetworkX创建了一个二部图,并希望将这两个集分别着色。我使用networkX二部模块中的color()函数。但是,颜色dict中的节点顺序不同于B.nodes中的节点顺序,例如: B.nodes=['a',1,2,3,4',c',B'] 二分体颜色(B)={'a':1,1:0,2:0,'B':1,4:0,'c':1,3:0} 这会导致图形颜色不正确,如下所示: 代码如下: B = nx.Graph() B.add_nodes_from([1,2,3,4], bipartite=

我已经使用NetworkX创建了一个二部图,并希望将这两个集分别着色。我使用networkX二部模块中的
color()
函数。但是,颜色dict中的节点顺序不同于B.nodes中的节点顺序,例如:

B.nodes=
['a',1,2,3,4',c',B']

二分体颜色(B)=
{'a':1,1:0,2:0,'B':1,4:0,'c':1,3:0}

这会导致图形颜色不正确,如下所示:

代码如下:

B = nx.Graph()
B.add_nodes_from([1,2,3,4], bipartite=0) # Add the node attribute "bipartite"
B.add_nodes_from(['a','b','c'], bipartite=1)
B.add_edges_from([(1,'a'), (1,'b'), (2,'b'), (2,'c'), (3,'c'), (4,'a')])
bottom_nodes, top_nodes = bipartite.sets(B)

color = bipartite.color(B)
color_list = []

for c in color.values():
    if c == 0:
        color_list.append('b')
    else:
        color_list.append('r')

# Draw bipartite graph
pos = dict()
color = []
pos.update( (n, (1, i)) for i, n in enumerate(bottom_nodes) ) # put nodes from X at x=1
pos.update( (n, (2, i)) for i, n in enumerate(top_nodes) ) # put nodes from Y at x=2

nx.draw(B, pos=pos, with_labels=True, node_color = color_list)
plt.show()
有什么我遗漏的吗


谢谢。

绘制图形时,颜色列表和节点列表(B.nodes)的顺序不同

color_list
['r', 'b', 'b', 'r', 'b', 'r', 'r']

B.nodes
NodeView((1, 2, 3, 4, 'a', 'b', 'c'))
我使用B.nodesorder创建了一个颜色列表,使用字典和映射B中nodelist的二部集

B = nx.Graph()
B.add_nodes_from([1,2,3,4], bipartite=0) # Add the node attribute "bipartite"
B.add_nodes_from(['a','b','c'], bipartite=1)
B.add_edges_from([(1,'a'), (1,'b'), (2,'b'), (2,'c'), (3,'c'), (4,'a')])
bottom_nodes, top_nodes = bipartite.sets(B)

color = bipartite.color(B)

color_dict = {0:'b',1:'r'}

color_list = [color_dict[i[1]] for i in B.nodes.data('bipartite')]

# Draw bipartite graph
pos = dict()
color = []
pos.update( (n, (1, i)) for i, n in enumerate(bottom_nodes) ) # put nodes from X at x=1
pos.update( (n, (2, i)) for i, n in enumerate(top_nodes) ) # put nodes from Y at x=2

nx.draw(B, pos=pos, with_labels=True, node_color = color_list)
plt.show()
输出: