在图上显示两个节点之间的边数

我正在从数据帧制作网络图,如下所示


import networkx as nx

import pandas as pd

import matplotlib.pyplot as plt


data = {'source': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'],

        'target': ['B', 'B', 'C', 'D', 'E', 'B', 'C', 'E', 'F', 'C']}

df = pd.DataFrame(data=data)


G = nx.from_pandas_edgelist(df, source='source', create_using=nx.Graph(), target='target')

pos = nx.spring_layout(G)

nx.draw_networkx(G, pos, with_labels=False, node_color='#1f0ee3', node_size=150,

                 edge_color='r', width=1, alpha=0.6, style='dashed',

                 font_color='k', font_size=15, font_weight=20)

# Offset for node labels

offset = 0.15

pos_labels = {}

keys = pos.keys()

for key in keys:

    x, y = pos[key]

    pos_labels[key] = (x, y + offset)

nx.draw_networkx_labels(G, pos=pos_labels, fontsize=2)


plt.xlim(-1.25, 1.25)

plt.ylim(-1.25, 1.25)

plt.title('Example')

plt.show()

它产生

http://img.mukewang.com/62e8d817000153b905700283.jpg

然而,这并没有显示的是每个节点之间的连接情况。例如,A->B实际上有三条边。 会使一些边缘看起来比其他边缘更厚,但我真正想要的是图上显示的两个节点之间的实际边缘数。这样,“B”的标签是“B(3)”(或类似的东西)。nx.MultiGraph()

我知道这可以告诉我节点之间的边数,但我想以编程方式将两个节点之间的边数显示为绘图上的计数。nx.Graph.number_of_edges()


凤凰求蛊
浏览 420回答 2
2回答

尚方宝剑之说

您可以调整数据帧以在目标节点字符串中包含边缘编号:data = {'source': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'],        'target': ['B', 'B', 'C', 'D', 'E', 'B', 'C', 'E', 'F', 'C']}df = pd.DataFrame(data=data)df = df.groupby(df.columns.tolist()).size().reset_index().rename(columns={0:'edges'})df['target'] = df['target'] + ' (' + df['edges'].astype(str) + ')'

慕后森

可用于标记边。提供一个字典,其中边缘作为键,边缘数作为值:nx.draw_networkx_edge_labelscounts = df.groupby('source')['target'].value_counts().to_dict()nx.draw_networkx_edge_labels(G, pos, edge_labels=counts)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python