(note - this is the same job as using multiple size scales in ggplot , but I'm asking another question)
I am trying to build a graph that shows transitions from one class to another. I want circles to represent each class, and arrows from one class to another represent transitions.
I use geom_segment with arrow () to draw arrows. Is there any way:
- make the arrows stop before they reach the circles.
- adjust the position so that if there is an arrow in both directions, they "dodge" rather than overlap.
I could not get position = "dodge" to do anything useful here.
As an example:
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)
