我正在使用networkx。我的意思是为每个weakly_connected_component_subgraphs使用不同的颜色绘制有向图。
这意味着将该颜色用于子图的节点和边缘。
我按照示例here,
添加一个颜色列表,每个节点一个,作为node_color
中nx.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
中设置相应的元素。
这在我看来非常复杂,我想可能有一种更简单的方法。
答案 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可选参数来执行此操作。