简体   繁体   中英

networkx encounter Node has no position

I have follow : networkx: change node color in draw_circular

to draw a pic with two color nodes.

I have some data like:

4556    5092    0.7000 
4556    4785    0.7500 
4556    5397    0.7000 
4556    5139    0.7500 
4556    5937    0.8333 
4556    6220    0.7000 
4556    5139    0.7500 
4556    6220    0.7063 
4559    4563    0.7500 
4559    4770    0.7500 
4559    4837    0.7500 
4559    5640    0.7500 
4559    4563    0.7500 
4559    4770    0.7500 
4559    4837    0.7500 
4559    5640    0.7500 
4561    4607    1.0000 
4561    4600    0.7500 
4561    4562    0.7500 
4561    5090    0.7500 
4561    5197    1.0000 
4561    5182    0.7500 
4561    5937    0.7500 
4561    6143    0.7500 
4561    5632    1.0000 
4561    5870    1.0000 
4561    6220    0.6756 
4561    6143    0.7500 
4561    6220    0.6750 
4562    4607    0.7500 
4562    5197    0.7500 
4562    5632    0.7500 
4562    5870    0.7500 
4562    6220    0.6656 
4564    4837    0.7500 
4564    4837    0.7500 
4566    5805    0.8750 
4566    5981    0.6729 
4571    4919    0.7000 
4571    6004    0.7500 
4571    6089    0.7000 
4571    6044    0.7500 
4571    6041    0.7000 
4571    5863    0.7500 
4571    6089    0.6398 

the first two colum is node,and the third is length of edge.

my code is:

import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
filedata1 = open("1.txt",'r')
filedata2 = open("2.txt",'r')
data1_nodes = set()
data2_nodes = set()

for line in filedata2:
    #print line
    datas = line.split()
    data2_nodes.add(datas[0])
    data2_nodes.add(datas[1])
    #print datas
    #G.add_node(int(datas[0]))
    #G.add_node(int(datas[1]))
    G.add_edge(int(datas[0]),int(datas[1]),length=float(datas[2]))
    #G.add_edge(datas[0],datas[1],length=datas[2])

for line in filedata1:
    #print line
    datas = line.split()
    data1_nodes.add(datas[0])
    data1_nodes.add(datas[1])
    G.add_edge(int(datas[0]),int(datas[1]),length=float(datas[2]))

data1_list = list(data1_nodes)
data2_list = list(data2_nodes)
#nx.draw(G,with_lables=False,node_size=100)
print 'i have ' ,G.number_of_nodes() 
#print G.nodes()
pos=nx.spring_layout(G)
#pos=nx.graphviz_layout(G)
print pos
print len(pos)
print 4789 in pos
nx.draw_networkx_nodes(G,pos,nodelist=data1_list,node_size=20,node_color='r')
nx.draw_networkx_nodes(G,pos,nodelist=data2_list,node_size=20,node_color='b')
plt.axis('off')
plt.savefig("data.png")
plt.show()

1.txt is: https://gist.github.com/young001/5531613 2.txt is: https://gist.github.com/young001/5531619

the return is :

... 4.92, 483.05), 6090: (170.5, 1658.1), 6097: (240.99, 307.32), 6098: (486.58, 694.79), 6103: (1583.7, 107.5), 6104: (427.04, 394.65), 6106: (241.71, 1647.5), 6110: (886.42, 783.84), 6111: (1276.5, 1102.8), 6112: (1197.8, 1077.6), 6113: (1693.7, 1229.5), 6115: (986.75, 358.81), 6116: (109.71, 1317.5), 6118: (1179.3, 1208.9), 6119: (1182.6, 1013.3), 6122: (1336.5, 1581.2), 6125: (1184.4, 1383.5), 6128: (615.71, 85.5), 6131: (1147.7, 1198.8), 6133: (1286.3, 690.69), 6134: (1205.4, 684.59), 6136: (1148.7, 1188.5), 6139: (1195.1, 611.44), 6141: (1234.3, 840.18), 6143: (612.13, 1060.3)}
736
True
Traceback (most recent call last):
  File "dataplot.py", line 37, in <module>
    nx.draw_networkx_nodes(G,pos,nodelist=data1_list,node_size=20,node_color='r')
  File "/usr/local/lib/python2.7/dist-packages/networkx/drawing/nx_pylab.py", line 366, in draw_networkx_nodes
    raise nx.NetworkXError('Node %s has no position.'%e)
networkx.exception.NetworkXError: Node '4789' has no position.

why 4789 is there,it still tells not?

You are mixing integers and strings. Try eg

data2_nodes.add(int(datas[0]))
data2_nodes.add(int(datas[1]))

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