Jenks
Jenks

Reputation: 2050

Networkx node sizes

I am creating a networkX graph with the node sizes correlating to nodes. When I create the graph, the node sizes don't correspond correctly with the size list passed to the graph. Can anyone help? Here is the code I'm using:

import networkx as nx

G = nx.Graph()
nodelist = []
edgelist = []
sizes = []
for i in Results[0]:
    if i > 0.10 and i != 1:
        Normnodesize = (i/Maxcs)*800
        Findnode = np.where(Results[0]==i)
        nodelist.append(str(Findnode[0][0]))
        edgelist.append((0,str(Findnode[0][0])))
        sizes.append(int(Normnodesize))

G.add_nodes_from(nodelist)
G.add_edges_from(edgelist)

pos = nx.fruchterman_reingold_layout(G)

nx.draw_networkx(G,pos,node_size=sizes)

If you look at the nodes, edges, node weight the print out looks like:

   16 (0, '16') 608
   38 (0, '38') 732
   55 (0, '55') 549
   63 (0, '63') 800
   66 (0, '66') 559
  106 (0, '106') 693
  117 (0, '117') 476
  124 (0, '124') 672
  130 (0, '130') 482
  143 (0, '143') 518

The node sizes in the list and the node sizes depicted are not the same and I can't figure out why.

Thanks everyone!

Upvotes: 4

Views: 7143

Answers (1)

Joel
Joel

Reputation: 23827

networkx stores nodes in a dict. When it draws them, it basically looks at the keys in the order python gives. There's no guarantee that's the same order that you've put their weights into sizes.

So try:

nx.draw_networkx(G,pos,nodelist = nodelist, node_size=sizes)

Upvotes: 8

Related Questions