Edge waypoints work well on typical trees but are somewhat buggy when used with nonzero-size vertices, e.g.:
import networkx as nx
import matplotlib.pyplot as plt
import iplotx as ipx
g = nx.DiGraph(); g.add_edges_from([
('CEO', 'Manager 1'),
('CEO', 'Manager 2'),
('CEO', 'Manager 3'),
('Manager 1', 'Employee 1'),
('Manager 1', 'Employee 2'),
('Manager 2', 'Employee 3'),
('Manager 2', 'Employee 4'),
('Manager 3', 'Employee 4'),
])
layout = {
'CEO': [0, 0],
'Manager 1': [1, -1],
'Manager 2': [1, 0],
'Manager 3': [1, 1],
'Employee 1': [2, -1],
'Employee 2': [2, 0],
'Employee 3': [2, 1],
'Employee 4': [2, 2],
}
ipx.network(
g,
layout=layout,
vertex_labels=True,
style="hollow",
vertex_marker='r',
edge_ports=[("e", "w")] * 8,
edge_waypoints="x0y1",
#edge_curved=True,
#edge_tension=[0.6] * 3 + [0.5] * 5,
margins=(0.08, 0.05),
)
plt.ion(); plt.show()

There are two things here:
- waypoints should be aware of vertices and ports
- we should add some kind of waypoint style "xmidy0,xmidy1" that makes an S/Z shape
Not urgent, but should not be that difficult either.
Edge waypoints work well on typical trees but are somewhat buggy when used with nonzero-size vertices, e.g.:
There are two things here:
Not urgent, but should not be that difficult either.