仅绘制带有正权重的边 NetworkX

4
我希望您能提供一种简洁易懂的方法来绘制仅包含正权重边的加权NetworkX图。目前我能想到的唯一方法是:
pos=nx.spring_layout(G) 
# filter and only draw positive edges
positive_edges = [(u,v) for (u,v,d) in G.edges(data=True) if d['weight'] >0]
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos,edgelist=positive_edges)
plt.axis('off')
plt.show()

我想知道是否有更简单的方法。我想象中的方式是这样的:

nx.draw(G, only_positive_edge=True)

或者

nx.draw(G, zero_weighted_edge_invisible=True)
1个回答

2
你可以将边提取到numpy数组中,然后应用过滤器。你可以使用to_numpy_matrix将边列表转换为numpy数组,并应用numpy过滤器,这对于大型图形而言相比传统循环等方法更有效率。完成修改后,使用from_numpy_matrix将图形转换回networkx格式。 import networkx as nx import numpy as np import matplotlib.pyplot as plt G = nx.Graph()
#Add Nodes
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_node(4)

#Add edges
G.add_edge(1, 2, weight= -1)
G.add_edge(2, 3, weight= 1)
G.add_edge(1, 3, weight= 2)
G.add_edge(4, 3, weight= -1)

#Extract edges into numpy array 
edges =  nx.to_numpy_matrix(G, nodelist= G.nodes())

#Change non-negative values to 0 
edges[edges<0] = 0

#Save the modified graph
G2 = nx.from_numpy_matrix(edges)

pos=nx.spring_layout(G2)
nx.draw_networkx_nodes(G2,pos)
nx.draw_networkx_edges(G2,pos)
plt.axis('off')
plt.show() 

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接