【问题标题】:How to write in Python NetworkX same code of R igraph如何在 Python NetworkX 中编写与 R igraph 相同的代码
【发布时间】:2020-03-26 10:51:05
【问题描述】:

我的老师使用 R,现在他正在解释图论。我不想使用 R,因为我使用 Python 并且更喜欢它,所以我想学习 NetworkX(NOT Python igraph,因为我在打印图表时遇到很多问题) .

关键是,如果与 R 相比,Python 代码似乎真的很复杂。

我更好地解释自己:你如何实现这个 R 代码

fig <- graph.formula(a-b, c-e-d, i-k-j-g-i, f-g-j-h-f, k-j-h-l-k, h-l-m-h)

在 NetworkX 上?

是否可以只排一排?如果没有,我该怎么办?

谢谢!

【问题讨论】:

  • 你能解释一下 R 代码的作用吗?

标签: python networkx igraph


【解决方案1】:

如果您查看formulaigraph 文档,您给出的行

fig <- graph.formula(a-b, c-e-d, i-k-j-g-i, f-g-j-h-f, k-j-h-l-k, h-l-m-h)

仅创建具有给定(无向)边和节点的图。所以你只想创建一个graph,你在networkx tutorialadd_edges_from方法)中找到你需要的一切

import networks as nx

graph = nx.Graph() # undirected as desired
graph.add_edges_from([("a", "b"), ("c","e"), ("e","d"), ("i","k"), ("k", "j"), ("j", "g"), ("g", "i")])

如您所见,这需要做更多的工作(前三组之后我就停下来了)。

【讨论】:

    【解决方案2】:

    你当然可以在networkX中做到这一点。我不知道是否有一条线,但很少。

    下面的代码使用您指定的节点和边创建一个有向图,然后绘制它。从理论上讲,可以将所有边添加到一行中(并且有更快的方法),但是此代码为 R 代码的每个逗号分隔部分各有一行,以提高可读性。

    import networkx as nx
    G = nx.DiGraph() #Creates empty graph
    G.add_nodes_from(range(0,13))#Adds nodes
    G.add_edges_from([(0,1)])#Adds directed edges
    G.add_edges_from([(2,3),(3,4)])
    G.add_edges_from([(8,10),(10,9),(9,6),(6,8)])
    G.add_edges_from([(5,6),(6,9),(9,7),(7,5)])
    G.add_edges_from([(10,9),(9,7),(7,11),(11,10)])
    G.add_edges_from([(7,11),(11,12),(12,7)])
    nx.draw(G)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2019-05-09
      相关资源
      最近更新 更多