仅绘制正加权边缘NetworkX

时间:2018-06-15 16:05:32

标签: python matplotlib graph networkx

我正在寻找一种干净,简单的方法来绘制仅具有正加权边缘的加权NetworkX图。

我能想到的唯一方法是:

nx.draw(G, zero_weighted_edge_invisible=True)

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

import re
search = '   test "no splits234" this-splits   this_not_splits  asdf123  '
re.split(r'[\s]*[\W][\s]*', search.strip())
['test', 'no', 'splits234', 'this', 'splits', 'this_not_splits', 'asdf123']

['test', 'no splits234', 'this', 'splits', 'this_not_splits', 'asdf', '123']

1 个答案:

答案 0 :(得分:1)

您可以将边缘提取到numpy数组中,然后应用过滤器。 您可以使用to_numpy_matrix将边缘列表更改为numpy数组并应用numpy过滤器,与传统的for循环等相比,这对于大型图表来说非常有效。然后,一旦修改完成,使用from_numpy_matrix来将图形转换为networkx格式。     将networkx导入为nx     导入numpy为np     将matplotlib.pyplot导入为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