为子图着色

时间:2018-07-17 06:39:24

标签: python plot networkx

我有一个完整的图(所有节点都通过一条边直接连接),我想为同一图上的节点和边的一个子集着色。 N = 5的完整图是这样。

N=5 COMPLETE GRAPH

现在我想给边缘的下一个子集上色,例如:[(0,3),(1,0),(2,1),(3,4),(4,2)]蓝色。我该如何在同一张图上做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果使用draw_networkx_*函数分别绘制图形的每个部分(节点,节点标签,边,边标签),则可以很好地控制呈现的内容。主要技巧是生成位置字典,然后将其重新用于每个绘图函数。

import networkx as nx
import itertools
import matplotlib.pyplot as plt

# produce a degree-5 complete directed graph
G = nx.DiGraph()
edges = itertools.permutations(xrange(5), 2) # see https://stackoverflow.com/a/10651524/1643946
G.add_edges_from(edges)

# specific path to highlight
elist =  [(0, 3), (1, 0), (2, 1), (3, 4), (4, 2)] 

# set up layout
pos = nx.circular_layout(G)

# draw it
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_labels(G, pos)
nx.draw_networkx_edges(G, pos, edge_color='k', width=0.5) # show all edges, thin lines
nx.draw_networkx_edges(G, pos, edgelist=elist, edge_color='b', width=2) # highlight elist

# turn off axis markings
plt.axis('off')

产生如下图:

complete graph with highlight