Я пытаюсь создать граф с node ярлыками, напечатанными вне узлов. Я могу сгенерировать "смещение", как показано ниже, что решает цель. Тем не менее, иногда метки перекрываются с ребрами (что нежелательно, поскольку вокруг узлов есть много пустых пространств, где могут быть напечатаны соответствующие метки). Мне нужно обозначить эти узлы таким образом, чтобы метки не перекрывали ни одного края или, по крайней мере, пытались максимально свести к минимуму перекрытие.
import networkx as nx
from networkx.utils import is_list_of_ints, flatten
import matplotlib.pyplot as plt
G=nx.Graph()
G = nx.complete_graph(5)
mapping = {0:'aaaaaaa',1:'bbbbbbb',2:'ccccccc', 3:'dddddddd', 4:'eeeeeeeee'}
G = nx.relabel_nodes(G,mapping)
plt.figure(figsize=(10,10), facecolor="w", frameon=False)
pos = nx.graphviz_layout(G, prog="fdp") #calculate position (x,y) coordinates
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')
nx.draw_networkx_edges(G,pos, width=2,edge_color='b')
#for labeling outside the node
offset =10
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.show()
Есть ли какая-либо функция в сети, которая может справиться с такой ситуацией. Я долго искал игры в googled без успеха.