绘制具有固定边缘的图形

时间:2015-01-07 23:52:02

标签: python python-2.7 graph networkx graph-drawing

我正在尝试使用NetworkX for 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

正如我想要的那样,但我需要添加边缘。 所以,如果我添加它们:

    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()

我得到了这个可怕的错误:

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

如果我没有设置固定位置我能够绘制它没问题,但我非常需要边缘是静态的。有什么建议?非常感谢!

1 个答案:

答案 0 :(得分:0)

X,Y数据不被视为数字。

您可以使用以下方法修复它:

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

注意:此答案由OP编辑成问题。我已将其移至此处的答案部分,并将其作为社区维基,因此我无法获得任何代表。