【问题标题】:NetworkX how to read nodes and edges from fileNetworkX如何从文件中读取节点和边
【发布时间】:2015-01-16 18:55:30
【问题描述】:

我想读取一个带有节点和边的文件,以便传递以下信息:

  1. 每条边的权重
  2. 每个节点的Department_id(如果department_id > 0,则使用特定颜色为节点着色,否则将其填充为黑色)

这是文件结构:

graph [      
      node [
        id 1
        label "Node 1"
        department_id 1
      ]
      node [
        id 2
        label "Node 2"
        department_id 0
      ]
      node [
        id 3
        label "Node 3"
        department_id 2
      ]
      edge [
        source 1
        target 2
        weight 7
      ]
      edge [
        source 1
        target 3
        weight 3
      ]
      edge [
        source 2
        target 3
        weight 1
      ]
]

这是我读取文件和绘制网络的简单代码:

def gml_file_importer(self):
        self.G = nx.read_gml(self.gml_file)
        print "GML file %s was successfully imported" %self.gml_file

def draw_network(self):
        nx.draw(self.G, node_size=30)
        plt.savefig("graph")

你能帮我读一下文件并按照我的描述做吗? 谢谢!

【问题讨论】:

    标签: python matplotlib networkx


    【解决方案1】:

    您的示例文件需要具有顶级“graph []”声明才能成为有效的 gml。例如

    graph [
      node [
        id 1
        label "Node 1"
        dapartment id 1
      ]
      ...
    ]
    

    一旦我添加文件导入 networkx 就好了。

    这将绘制图形G,将节点着色为绿色或黑色并添加标签。

    pos = nx.circular_layout(G)
    nx.draw_networkx_nodes(G, pos, 
      nodelist=[n for n in G.node if G.node[n]['department_id'] > 0], node_color='g')
    nx.draw_networkx_nodes(G, pos, 
      nodelist=[n for n in G.node if G.node[n]['department_id'] <= 0], node_color='black')
    nx.draw_networkx_edges(G, pos)
    nx.draw_networkx_edge_labels(G, pos, 
      {(frm, to): G.edge[frm][to]['weight'] for (frm, to) in G.edges()})
    

    【讨论】:

    • 谢谢!它工作得更好!我可以调整边缘重量(宽度)而不是边缘标签吗?例如我试过:nx.draw_networkx_edges(self.G, pos, {(frm, to): self.G.edge[frm][to]['weight'] for (frm, to) in self.G.edges()}, width=float({(frm, to): self.G.edge[frm][to]['weight'] for (frm, to) in self.G.edges()})) 但它不起作用
    • 我解决了! nx.draw_networkx_edges(self.G, pos, width = [self.G.edge[frm][to]['weight'] for (frm, to) in self.G.edges()])
    猜你喜欢
    • 2021-04-24
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2013-02-26
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多