Matrix对象没有属性节点networkX python

时间:2015-05-18 18:41:38

标签: python networkx

我试图将某些数字表示为具有连接组件的图形的边缘。为此,我一直在使用python的networkX模块 我的图是G,并且节点和边的初始化如下:

    G = nx.Graph()
    for (x,y) in my_set:
       G.add_edge(x,y)

    print G.nodes() #This prints all the nodes
    print G.edges() #Prints all the edges as tuples
    adj_matrix = nx.to_numpy_matrix(G)

一旦我添加以下行,

    pos = nx.spring_layout(adj_matrix)

我得到了上述错误。 如果它可能有用,则所有节点都以9-15位数编号。有412个节点和422个边缘。

详细错误:

      File "pyjson.py", line 89, in <module>
      mainevent()        
      File "pyjson.py", line 60, in mainevent
      pos = nx.spring_layout(adj_matrix)
      File "/usr/local/lib/python2.7/dist-packages/networkx/drawing/layout.py", line 244, in fruchterman_reingold_layout
      A=nx.to_numpy_matrix(G,weight=weight)
      File "/usr/local/lib/python2.7/dist-packages/networkx/convert_matrix.py", line 128, in to_numpy_matrix
      nodelist = G.nodes()
      AttributeError: 'matrix' object has no attribute 'nodes'

编辑:解决方法如下。有用的信息:pos创建一个带有每个节点坐标的字典。执行nx.draw(G,pos)会创建一个pylab图。但它没有显示它,因为pylab没有自动显示。

2 个答案:

答案 0 :(得分:1)

spring_layout将网络图作为第一个参数,而不是numpy数组。它返回的是根据Fruchterman-Reingold力导向算法的节点位置。

所以你需要将它传递给draw例子:

import networkx as nx
%matplotlib inline
G=nx.lollipop_graph(14, 3)
nx.draw(G,nx.spring_layout(G))

的产率:

enter image description here

答案 1 :(得分:1)

(这个答案中的一些解决了你评论中的一些问题。你可以在你的问题中添加这些内容,以便以后的用户获得更多的上下文)

pos创建一个带有每个节点坐标的dict。做nx.draw(G,pos)会创建一个pylab图。但它不会显示它,因为pylab不会自动显示。

import networkx as nx
import pylab as py

G = nx.Graph()
for (x,y) in my_set:
   G.add_edge(x,y)

print G.nodes() #This prints all the nodes
print G.edges() #Prints all the edges as tuples
pos = nx.spring_layout(G)
nx.draw(G,pos)
py.show() # or py.savefig('graph.pdf') if you want to create a pdf, 
          # similarly for png or other file types

最终的py.show()会显示它。 py.savefig('filename.extension')将根据您用于extension的内容保存为多种文件类型中的任何一种。