2016-09-08 39 views
0

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

这意味着将该颜色用于子图的节点和边缘。 我遵循示例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 

我趁着我的节点被标有顺序编号,从零开始建造。

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

我conceieve是得到sgedges = nx.edges(sg) 然后遍历nwedges = nx.edges(my_network)和使用计数器,检查是否每一条边是sgedges的方式。如果是这样,请在列表color_edges = [ colorlist[ 0 ] ] * nedges中设置相应的元素。

这似乎对我来说颇为复杂,我想这可能是一种更简单的方法。

回答

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可选参数来执行此操作。

+0

感谢您的建议。它与[这里]做的相似(https://networkx.github.io/documentation/networkx-1.10/examples/graph/atlas.HTML)。我意识到这一点。在绘制所有wcc后,应该发出'plt.savefig'。它产生了预期的结果,但是使用与寻求的方法不同的方法。我寻找一个颜色列表作为'edge_color'的参数,在整个图上调用'nx.draw_networkx'。这意味着在整个图中为每条边确定一个索引(所以我问“我如何设置边的颜色列表?”而不是“如何生成图形?”) –

+0

也许使用'edgelist'工作,我不知道那件事。我会查一下。 –

相关问题