Arreglando flechas entre puntos muy bien en ggplot2

(nota - este es el mismo trabajo queutilizando escalas de tamaño múltiple en un ggplot, pero estoy haciendo una pregunta diferente)

Estoy tratando de construir una trama que muestre las transiciones de una clase a otra. Quiero tener círculos que representan cada clase, y flechas de una clase a otra que representan transiciones.

Estoy usando geom_segment con la flecha () para dibujar las flechas. ¿Hay alguna manera de:

Haz que las flechas se detengan antes de que alcancen los círculos.ajuste la posición para que si hay una flecha en ambas direcciones, se "esquiven" en lugar de superponerse.

No pude obtener position = "dodge" para hacer algo útil aquí.

Como ejemplo:

library(ggplot2)
points <- data.frame( x=runif(10), y=runif(10),class=1:10, size=runif(10,min=1000,max=100000) )
trans <- data.frame( from=rep(1:10,times=10), to=rep(1:10,each=10), amount=runif(100)^3 )
trans <- merge( trans, points, by.x="from", by.y="class" )
trans <- merge( trans, points, by.x="to", by.y="class", suffixes=c(".to",".from") )
ggplot( points, aes( x=x, y=y ) ) + geom_point(aes(size=size),color="red",shape=1) + 
    scale_size_continuous(range=c(4,20)) +
    geom_segment( data=trans[trans$amount>0.6,], aes( x=x.from, y=y.from, xend=x.to, yend=y.to ),lineend="round",arrow=arrow(),alpha=0.5, size=0.3)

Respuestas a la pregunta(2)

Su respuesta a la pregunta