我有一个完整的图(所有节点都通过一条边直接连接),我想为同一图上的节点和边的一个子集着色。 N = 5的完整图是这样。
现在我想给边缘的下一个子集上色,例如:[(0,3),(1,0),(2,1),(3,4),(4,2)]蓝色。我该如何在同一张图上做到这一点?
谢谢。
答案 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')
产生如下图: