pos_labels = {}
for aNode in G.nodes():
    x, y = pos[aNode]
N = G[aNode]
cx = sum(map(lambda x: pos[x][0], N)) / len(pos)
cy = sum(map(lambda x: pos[x][1], N)) / len(pos)
slopeY = y - cy
slopeX = x - cx
pos_labels[aNode] = x + slopeX * label_ratio, y + slopeY * label_ratio
nx.draw_networkx_labels(G, pos=pos_labels, fontsize=2)
plt.show()
узлы метки снаружи с минимальным перекрытием с другими узлами/ребрами в networkx