我正在寻找一种干净,简单的方法来绘制仅具有正加权边缘的加权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']
答案 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()