2015-01-07 3 views
1

NetworkX를 Python으로 사용하려고하는데 지금까지는 좋았지 만 그리기가 어려웠습니다.고정 위치 모서리가있는 그래프 그리기

내 데이터는 실제로 도시의 교차로 목록입니다. 노드는 X, Y (위도, 경도)가있는 교차로이며 모서리는 도로 여야합니다. 지금까지 그렇게 간단합니다.

G = nx.Graph() 
    for node in nodes: 
     attributes = dict(node.items()) 
     G.add_node(attributes.pop('id')) 
     G.node[node.get('id')]['pos'] = attributes.values() 

    pos = nx.get_node_attributes(G, 'pos') 
    nx.draw(G,pos) 
    plt.show() 

그것은 다음과 같습니다 :

그래서 나는 고정 된 위치와 내 작은 도시를 그리는 관리 나는 그것을 원하는 정확히 같은 A map without edges

을,하지만 난 가장자리를 추가해야합니다. 내가 좋아하는 추가 그래서 경우 : 나는 그것을 문제를 그릴하지 수 있어요 고정 위치를 설정할 수 있지만하지 않는 경우

Traceback (most recent call last): 
    File "ms/Main.py", line 28, in <module> 
nx.draw(G,pos) 
    File "/usr/local/lib/python2.7/site-packages/networkx/drawing/nx_pylab.py", line 131, in draw 
draw_networkx(G, pos=pos, ax=ax, **kwds) 
    File "/usr/local/lib/python2.7/site-packages/networkx/drawing/nx_pylab.py", line 265, in draw_networkx 
edge_collection = draw_networkx_edges(G, pos, **kwds) 
    File "/usr/local/lib/python2.7/site-packages/networkx/drawing/nx_pylab.py", line 610, in draw_networkx_edges 
minx = numpy.amin(numpy.ravel(edge_pos[:, :, 0])) 
    File "/usr/local/lib/python2.7/site-packages/numpy/core/fromnumeric.py", line 2216, in amin 
out=out, keepdims=keepdims) 
    File "/usr/local/lib/python2.7/site-packages/numpy/core/_methods.py", line 29, in _amin 
return umr_minimum(a, axis, None, out, keepdims) 
TypeError: cannot perform reduce with flexible type 

내가 꽤 필요합니다

G = nx.Graph() 
    for node in nodes: 
     attributes = dict(node.items()) 
     G.add_node(attributes.pop('id')) 
     G.node[node.get('id')]['pos'] = attributes.values() 

    for link in links: 
     attributes = dict(link.items()) 
     G.add_edge(attributes.pop('from'), attributes.pop('to')) 

    pos = nx.get_node_attributes(G, 'pos') 
    nx.draw(G,pos) 
    plt.show() 

나는이 끔찍한 오류 가장자리가 정적이됩니다. 어떤 충고? 고마워요!

+0

'for link in ... '루프 바로 앞의'G.order()'를 확인하십시오. – Joel

+0

인쇄가 시작되기 전에 예상 한 것이지 282 이후인지 여전히 확실하지 않은지 확실하지 않은 경우 282 :) – Atais

+0

흠 ... 문제가 무엇인지에 대한 내 추측을 배제합니다. networkx가 아마도 추가 한 노드와 다른 개체로 가장자리의 끝점을 처리하고 있다고 생각했습니다. – Joel

답변

0

X, Y 데이터가 숫자로 처리되지 않습니다.

이 그것을 해결할 수 :

xy = attributes.values() 
G.add_node(attributes.pop('id'), dict([('pos', (float(xy[0]),float(xy[1])))])) 

참고 :이 답변은 영업 이익에 의하여 문제로 편집되었다. 저는 응답 섹션으로 옮겨서 커뮤니티 위키로 만들었습니다. 그래서 어떤 담당자도 얻을 수 없습니다.