【问题标题】:Graph networkx from python dict来自 python dict 的图 networkx
【发布时间】:2017-11-16 08:25:44
【问题描述】:

我需要有关 networkX 或 python 中任何其他图形库的帮助。 我有带键的字典,每个键都有几个值:

{nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
 'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object),
 'GGHH': array(['KKLL', 'NI4146', 'MMCC', nan, nan, nan, nan],dtype=object), ...}

现在我的问题是,我怎样才能将数据从这个 dict 放到图形中,其中键是节点,值是边。哪种方式最适合通过dict进行迭代?

import networkx as nx
import matplotlib.pyplot as plt

g = nx.DiGraph()
g.add_nodes_from([1,2,3,4,5])
g.add_edge(1,2)
g.add_edge(4,2)
g.add_edge(3,5)
g.add_edge(2,3)
g.add_edge(5,4)

nx.draw(g,with_labels=True)
plt.draw()
plt.show()

应该是这样的,但是有其他数据

【问题讨论】:

  • 为什么你有一个 numpy 字符串数组而不是使用常规的字符串列表?
  • 我真的不知道你在说什么,我是个初学者。但我猜你怎么想,那是因为我得到了第一个数据帧,然后我将数据帧转换为 dict。 @IgnacioVergaraKausel

标签: python dictionary graph networkx


【解决方案1】:

假设你从

d = {nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
 'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object)}

然后你可以像这样使用add_nodes_from

g = nx.DiGraph()
g.add_nodes_from(d.keys())

add_edges_from 像这样:

for k, v in d.items():
    g.add_edges_from(([(k, t) for t in v]))

请注意,没有必要假设节点是整数。

按照这个,你可以看到:

>>> g.edges()
[(nan, nan),
 ('AAAD', 'BBDD'),
 ('AAAD', nan),
 ('MMCC', nan),
 ('MMCC', 'AAAD'),
 ('BBDD', nan),
 ('KKLL', 'BBDD'),
 ('KKLL', nan),
 ('KKLL', 'AAFF'),
 ('KKLL', 'AAAD'),
 ('KKLL', 'MMCC'),
 ('AAFF', nan),
 ('AAFF', 'AAAD')]

​

【讨论】:

    【解决方案2】:

    实际上,Graph 可以简单地通过字典进行初始化。 在这种情况下:

    g = nx.DiGraph(d)
    

    会返回你想要的图表。

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      相关资源
      最近更新 更多