关于如何创建具有以下特点的网络,我有一个问题:
A B
12 [32, 12, 45]
2 [43, 41 ,2,15]
15 [15,18,24,1]
1 [1,24,7]其中A列中的数字和B中的数字是节点。我想在B中找到A和它们的对应值之间的联系;然后,将B中的元素连接到A或彼此之间。例如:
<代码>F 210
我怎么能画出来呢?
我认为我应该使用爆炸;我使用错误的方法对edgelist:
G = nx.from_pandas_edgelist(df, 'A', 'B')
plt.figure(3,figsize=(30,24))
nx.draw(G, node_size=200, with_labels=False)
pos = nx.spring_layout(G)
nx.draw(G, pos = pos)发布于 2020-08-15 05:54:37
我对这类图的经验很少,但我用explode()实现了列表扩展,并在matplotlib中创建了一个以A和B列作为路径的图。
import pandas as pd
import numpy as np
import io
df = pd.DataFrame({'A':[12,2,15,1], 'B':[[32, 12, 45], [43,41,2,15], [15,18,24,1], [1,24,7]]})
df = df.explode('B', ignore_index=True)
import matplotlib.pyplot as plt
import networkx as nx
G = nx.DiGraph()
nx.add_path(G, df['A'])
nx.add_path(G, df['B'])
nx.draw_networkx(G)
plt.show()

发布于 2020-08-15 06:19:24
根据您的需求,您不仅需要使用else,还需要为要保留的唯一节点集过滤数据(否则,它将绘制所有可用的节点)。
规定-
<代码>F29
你可以做下面的处理数据-
df = pd.DataFrame({'A':[12,2,15,1], 'B':[[32, 12, 45], [43,41,2,15], [15,18,24,1], [1,24,7]]})
df = df.explode('B')
vocab = set(df['A'].unique()).intersection(set(df['B'].unique()))
df = df[df['B'].isin(vocab)]
print(df)#leaving only the nodes that have existing connections.
A B
0 12 12
1 2 2
1 2 15
2 15 15
2 15 1
3 1 1然后,您可以简单地使用networkx从Source数据from进行绘图。
G = nx.from_pandas_edgelist(df, 'A', 'B')
nx.draw_networkx(G)
plt.show()

检查自己的回路-
print("Nodes with self loops:",list(G.nodes_with_selfloops()))Nodes with self loops: [12, 2, 15, 1]如果您想用自循环实现绘图,那么您需要使用Graphviz来绘制它,就像在这个SO post中提到的那样
https://stackoverflow.com/questions/63422243
复制相似问题