问题描述
我在 networkx 中有双向图,我想显示两个节点之间有多少连接。 如图所示,我想添加两个数字(或至少一个)来显示两个节点之间有多少连接。图比这更复杂,因为这是示例问题。
更新:
df = pd.DataFrame({'from': fromlist,'to': tolist})
G = nx.from_pandas_edgelist(df,'from','to',create_using=nx.DiGraph())
if.self.ui.radioButtonCircular.isChecked():
nx.draw(G,with_labels=True,node_size=5500,node_color=[mapper.to_rgba(i)
for i in d.values()],font_size=7,node_shape="s",alpha=0.7,arrows=True,pos=nx.circular_layout(G))
plt.title("Directed")
plt.show()
这上面有很多分析,但是在我的fromlist和tolist中是有联系的。像这样:
fromlist: A,A,B,C
tolist: B,C,A
现在我想让它在双向图中显示 A 与 B 连接 3 次,B 与 A 连接 2 次,C 与 A 连接一次,但 A 与 C 也连接一次, ... 这在 networkx 中可能吗?
解决方法
有向图不允许 https://networkx.org/documentation/stable/reference/classes/digraph.html 中所述的平行边。
所以如果你做 print(G['A']['B'])
只显示一个边缘。
也许您可以尝试为边分配一个属性,例如:
for from_node,to_node in zip(from_list,to_list):
if G.has_edge(from_node,to_node):
G[from_node][to_node]['count'] += 1
else:
G.add_edge(from_node,to_node,count = 1)
然后就可以显示边属性如Labeling edges in networkx
如果您的图表非常大并且 for 循环花费太多时间,您可以这样做:
df['count'] = 1
df = df.groupby(['from','to']).sum().reset_index()
G = nx.from_pandas_edgelist(df,'from','to',['count'],create_using=nx.DiGraph())