【问题标题】:Draw only positively weighted edge NetworkX仅绘制正加权边 NetworkX
【发布时间】:2018-11-25 12:21:16
【问题描述】:

我正在寻找一种简洁、简单的方法来绘制仅具有正加权边的加权 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)

【问题讨论】:

    标签: python matplotlib graph networkx


    【解决方案1】:

    您可以将边缘提取到一个 numpy 数组中,然后应用过滤器。 您可以使用 to_numpy_matrix 将边列表更改为 numpy 数组并应用 numpy 过滤器,与传统的 for 循环等相比,这对于大型图形来说是非常明智的。然后,一旦修改完成,使用 from_numpy_matrix 将图形放入网络x格式。 将 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() 
    

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2021-06-03
      相关资源
      最近更新 更多