简体   繁体   中英

How to sort edges in networkx based on their weight

I a using NetworkX for a network analysis in python. I determine the weight for every edge and add that edge to the graph in the following way:

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np


airports = ['ATL','LAX','ORD']
weights  = [500,200,150] #Note that in my real code I I calculated these weights, they are not provided
G = nx.Graph()
G.add_nodes_from(airports)

weightlst = []
airports_pos = []
checked_airports = []

i = 0
for airport1 in airports:
    for airport2 in airports:
        if airport1 != airport2 and  checked_airports.count([airport1,airport2])==0 and checked_airports.count([airport2,airport1])==0:
            weightedge = weights[i]
            weightlst.append(weightedge)
            weightedge = weightedge*0.0020+0.5
            G.add_edge(airport1, airport2, weight=weightedge)
    checked_airports.append([airport1,airport2])
    i = i + 1

For context, the weight of each edge indicates how many flights occur between two airports, and my issue is that it is unclear which 'routes' are 'busiest' because the irrelevant edges are drawn over the relevant ones. I wish to draw the edges with the highest weight last so that it is clear which are the 'busiest flight routes' in the network.

使用:

edges=sorted(G.edges(data=True), key=lambda t: t[2].get('weight', 1))

Put all the edge data in a list and then sort it with a custom key function (this is very easy to look up). NetworkX probably doesn't have any functionality to do what you want because it doesn't need to.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM