Networkx:为每个连接的组件使用不同的颜色

时间:2016-09-08 11:10:41

标签: colors networkx

我正在使用networkx。我的意思是为每个weakly_connected_component_subgraphs使用不同的颜色绘制有向图。

这意味着将该颜色用于子图的节点和边缘。 我按照示例here, 添加一个颜色列表,每个节点一个,作为node_colornx.draw_networkx_nodes的参数。

节点的颜色列表是使用

构建的
colorlist = [ 'r', 'g', 'b', 'c', 'm', 'y', 'k' ]
ncolors = len( colorlist )
    wcc = nx.weakly_connected_component_subgraphs( my_network )
    color_nodes = [ colorlist[ 0 ] ] * nnodes
    isg = 0
    for sg in wcc :
        isg += 1
        color_sg = colorlist[ isg % ncolors ]
        # List of nodes in sg
        sgnodes = nx.nodes(sg)
        for i in range( len( sgnodes ) ) :
            color_nodes[ sgnodes[ i ] ] = color_sg

我利用我的节点标记了序列编号,从零开始。

如何设置边缘的颜色列表?(如果节点没有按顺序编号,可能会出现同样的问题。)

我认为有一种获得sgedges = nx.edges(sg)的方法 然后迭代nwedges = nx.edges(my_network)并使用计数器,检查每条边是否在sgedges。如果是,请在列表color_edges = [ colorlist[ 0 ] ] * nedges中设置相应的元素。

这在我看来非常复杂,我想可能有一种更简单的方法。

1 个答案:

答案 0 :(得分:2)

绘图命令允许您绘制一组节点和边。它还允许您设置边缘和节点颜色。您可以将节点颜色设置为单个值,在这种情况下,在该命令中绘制的所有节点都将获得该颜色。类似的边缘颜色。

pos = nx.spring_layout(my_network)
colorlist = [ 'r', 'g', 'b', 'c', 'm', 'y', 'k' ]
wcc = nx.weakly_connected_component_subgraphs( my_network )
for index, sg in enumerate(wcc):  #there's probably a more elegant approach using zip
nx.draw_networkx(sg, pos = pos, edge_color = colorlist[index], node_color = colorlist[index])

由于您要绘制的每件事实际上都是图表,因此您无需指定正在绘制哪些节点和边。但是,您可以使用edgelist和nodelist可选参数来执行此操作。