在networkx中为边上色
我写了一段简单的代码,用来在一个给定的图G中生成随机漫步,使用的是networkx库。现在,当我在图中漫步时,我想用matplotlib把边缘上色并绘制出来,比如在一个循环中。举个例子:假设我从节点1走到节点2,沿着一条连接的边,我希望那条边的颜色和其他边不一样。以下是代码:
def unweighted_random_walk(starting_point,ending_point, graph):
'''
starting_point: String that represents the starting point in the graph
ending_point: String that represents the ending point in the graph
graph: A NetworkX Graph object
'''
##Begin the random walk
current_point=starting_point
#current_node=graph[current_point]
current_point_neighors=graph.neighbors(current_point)
hitting_time=0
#Determine the hitting time to get to an arbitrary neighbor of the
#starting point
while current_point!=ending_point:
#pick one of the edges out of the starting_node with equal probs
possible_destination=current_point_neighbors[random.randint(0,current_point_neighors)]
current_point=possible_destination
current_point_neighbors=graph.neighbors(current_point)
hitting_time+=1
return hitting_time
2 个回答
0
这个方法很好用……不过,要注意把列表填充上合适的值。下面是一个可以正常工作的代码修改:
def colors(G, attrib):
colors = []
for node,data in G.nodes_iter(data=True):
# return a color string based on whatever property you want
if data['someproperty'] != attrib:
colors.append('AliceBlue')
else:
colors.append('Crimson')
return colors
3
这是我使用的内容:
def colors(G):
colors = []
for edge,data in G.edges_iter(data=True):
# return a color string based on whatever property you want
return 'red' if data['someproperty'] else 'blue'
# alternatively you could store a 'color' key on the edge
# return data['color']
return colors
# When you invoke the draw command pass a list of edge colors
nx.draw_spectral(G, edge_color=colors(G))