Hi,
Edge drawing is implemented in specialized edge drawer classes in igraph/drawing/edge.py. They all derive from an abstract base class called AbstractEdgeDrawer, which defines a function named get_label_position() that returns the position of the label for an edge. The default edge drawer used by igraph is called ArrowEdgeDrawer.
You can therefore simply implement a new class derived from ArrowEdgeDrawer, override its get_label_position() method, and then use this custom edge drawer when plotting the graph as follows:
from igraph.drawing.edge import ArrowEdgeDrawer
from igraph.drawing.graph import DefaultGraphDrawer
from functools import partial
class CustomEdgeDrawer(ArrowEdgeDrawer):
# do your magic here
pass
my_drawer = partial(DefaultGraphDrawer, edge_drawer_factory=CustomEdgeDrawer)
plot(graph, drawer_factory=my_drawer)
(Haven't tested it, but it should work).
All the best,