I am trying to build a network diagram in ggplot. Two things: 1) I need to put the nodes in specific (x, y) values. It's not a problem. 2) The network is directed, but I need to show the differences in the transition from, say, Node B to Node A, than from Node from A to Node B.
This last bit is having problems. Basically, I need to compensate for two lines running in parallel between nodes. Ultimately, the line weights will be mapped to something, but something like this looks like this:

But this code is generated manually (pasted below for reference). I'm trying to get the offset in ggplot, where I already have pairs (x, y) for Node positions, as well as a list of edges for the links between (x, y).
offsetDf <- data.frame('x' = c(10, 40), 'y' = c(10, 30), 'startX' = c(13, 36.5), 'startY' = c(11, 29), 'endX' = c(37.5, 12), 'endY' = c(27, 13) ) ggplot(offsetDf, aes(x = x, y = y)) + geom_point(size = 13) + xlim(0,50) + ylim(0,50) + geom_segment(aes(x = startX, y = startY, xend = endX, yend = endY), arrow = arrow(length = unit(.3, 'cm')))
I looked at both GGally and geomnet, but it doesn't look like it has something that can handle this. I found someone who built a little geometry to do just that - it has inputs to offset and shorten the ends of the segments (so that they don't reach the node). Here on this SO page (scroll to the end): geom_segment_plus on SO
But it doesn't work anymore. When I try to use it, I get an error message:
Error in eval (expr, envir, enc): could not find function "eval"
Which, doing a little googling search, seems to be related to the last major ggplot major overhaul (and I'm not good enough as an encoder to go under the hood and figure out how to fix it). There will be hundreds of stories with 10-20 nodes each, so trial and error will not happen manually. Any help is appreciated.