Я делаю сетевой график из кадра данных, как показано ниже
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()
, который производит
Что это не показывает, однако , как могут быть соединения между каждым узлом. Например, A-> B на самом деле имеет три ребра. nx.MultiGraph()
сделает некоторые ребра более толстыми, чем другие, но на самом деле мне нужно фактическое количество ребер между двумя узлами, отображаемыми на графике. Так что метка для «B» - это «B (3)» (или что-то в этом роде).
Я знаю, что nx.Graph.number_of_edges()
может подсказать мне количество ребер между узлами, но я хочу отобразить число ребер между двумя узлами, как программный отсчет на графике.