View source: R/geom_segment_plus.R
| geom_segment_plus | R Documentation | 
Still a WIP. The dropping and warning of segments switching directions isn't really working correctly yet.  geom_segment_plus is an updated version of mo-seph's Stack Overflow code (https://stackoverflow.com/q/14647988/4560765), which no longer works. mo-seph's code in turn is an extension of ggplot2's geom_segment, but with the ability to offset segments that overlap, and to shorten the end or beginning of the segment.
geom_segment_plus(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  arrow = NULL,
  arrow.fill = NULL,
  lineend = "butt",
  linejoin = "round",
  shorten.limit = c("warn", "drop", "ignore"),
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE
)
| mapping, data, ..., stat, parse, inherit.aes | See the documentation for  | 
This code basically has three new possible parameters:
shorten.start/shorten.end: this moves the start/end of the segment closer to the midpoint by a proportion
shorten.start.abs/shorten.end.abs: this moves the start/end of the segment closer to the midpoint by an absolute value
offset: if two segments fully overlap, this offsets them slightly
d <- data.frame(x=c(-1,1),
           y=c(-1,1),
           x.to=c(2,-1),
           y.to=c(-1,1))
d %>%
  ggplot(aes( x=x, y=y ) ) +
  geom_point() +
  geom_segment_plus(aes( x=x, y=y, xend=x.to, yend=y.to ),
                    lineend="round", arrow=arrow(length=unit(0.15, "inches")),
                    offset=0.00, shorten.start=0.5, shorten.end=0,
                    shorten.end.abs=0.15,
                    shorten.limit = 'drop')
d %>%
  ggplot(aes( x=x, y=y ) ) +
  geom_point() +
  geom_segment_plus(aes( x=x, y=y, xend=x.to, yend=y.to ),
                    lineend="round", arrow=arrow(length=unit(0.15, "inches")),
                    offset=0.00, shorten.start=1, shorten.end=0,
                    shorten.end.abs=1.25,
                    shorten.limit = 'drop')
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.