Organizando flechas entre pontos bem em ggplot2

(nota - este é o mesmo trabalho queusando várias escalas de tamanho em um ggplot, mas eu estou fazendo uma pergunta diferente)

Estou tentando construir um gráfico que mostra transições de uma classe para outra. Eu quero ter círculos representando cada classe e setas de uma classe para outra representando transições.

Eu estou usando geom_segment com arrow () para desenhar as setas. Existe alguma maneira de:

faça as flechas pararem antes que elas atinjam os círculosajuste a posição de modo que, se houver uma seta nas duas direções, ela seja "esquivada" em vez de se sobrepor.

Eu não consegui me posicionar para fazer qualquer coisa útil aqui.

Como um exemplo:

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)

questionAnswers(2)

yourAnswerToTheQuestion