有没有办法显示 networkx 中节点和边之间的连接数
Is there a way to show number of connection between nodes and edges in networkx
我在 networkx 中有双向图,我想显示两个节点之间有多少个连接。
如图所示,我想添加两个数字(或至少一个)来显示两个节点之间有多少连接。图比这更复杂,因为这是示例问题。
Link to image
更新:
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, A, B, B, A, C
tolist: B, C, B, A, A, B, A
现在我想让它在双向图中显示 A 与 B 连接 3 次,B 与 A 连接 2 次,C 与 A 连接一次,但 A 与 C 也连接 1 次时间,... 这在 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)
然后你可以显示边缘属性,如图
如果你的图表非常大并且 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())
我在 networkx 中有双向图,我想显示两个节点之间有多少个连接。 如图所示,我想添加两个数字(或至少一个)来显示两个节点之间有多少连接。图比这更复杂,因为这是示例问题。
Link to image
更新:
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, A, B, B, A, C
tolist: B, C, B, A, A, B, A
现在我想让它在双向图中显示 A 与 B 连接 3 次,B 与 A 连接 2 次,C 与 A 连接一次,但 A 与 C 也连接 1 次时间,... 这在 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)
然后你可以显示边缘属性,如图
如果你的图表非常大并且 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())