A diagonal is a bezier curve where the control points are moved
perpendicularly towards the center in either the x or y direction a fixed
amount. The versions provided here calculates horizontal diagonals meaning
that the x coordinate is moved to achieve the control point. The
geom_diagonal()
and stat_diagonal()
functions are simply helpers that
takes care of calculating the position of the control points and then
forwards the actual bezier calculations to geom_bezier()
.
stat_diagonal(mapping = NULL, data = NULL, geom = "path", position = "identity", n = 100, strength = 0.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_diagonal(mapping = NULL, data = NULL, stat = "diagonal", position = "identity", n = 100, na.rm = FALSE, strength = 0.5, show.legend = NA, inherit.aes = TRUE, ...) stat_diagonal2(mapping = NULL, data = NULL, geom = "path_interpolate", position = "identity", na.rm = FALSE, show.legend = NA, n = 100, strength = 0.5, inherit.aes = TRUE, ...) geom_diagonal2(mapping = NULL, data = NULL, stat = "diagonal2", position = "identity", arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 100, strength = 0.5, ...) stat_diagonal0(mapping = NULL, data = NULL, geom = "bezier0", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, strength = 0.5, ...) geom_diagonal0(mapping = NULL, data = NULL, stat = "diagonal0", position = "identity", arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, strength = 0.5, ...)
mapping  Set of aesthetic mappings created by 

data  The data to be displayed in this layer. There are three options: If A A 
geom  The geometric object to use display the data 
position  Position adjustment, either as a string, or the result of a call to a position adjustment function. 
n  The number of points to create for each segment 
strength  The proportion to move the control point along the xaxis towards the other end of the bezier curve 
na.rm  If 
show.legend  logical. Should this layer be included in the legends?

inherit.aes  If 
...  Other arguments passed on to 
stat  The statistical transformation to use on the data for this layer, as a string. 
arrow  Arrow specification, as created by 
lineend  Line end style (round, butt, square). 
geom_diagonal and geom_diagonal0 understand the following aesthetics (required aesthetics are in bold):
x
y
xend
yend
color
size
linetype
alpha
lineend
geom_diagonal2 understand the following aesthetics (required aesthetics are in bold):
x
y
group
color
size
linetype
alpha
lineend
The interpolated point coordinates
The progression along the interpolation mapped between 0 and 1
data < data.frame( x = rep(0, 10), y = 1:10, xend = 1:10, yend = 2:11 ) ggplot(data) + geom_diagonal(aes(x, y, xend = xend, yend = yend))# The standard version provides an index to create gradients ggplot(data) + geom_diagonal(aes(x, y, xend = xend, yend = yend, alpha = stat(index)))# The 0 version uses bezierGrob under the hood for an approximation ggplot(data) + geom_diagonal0(aes(x, y, xend = xend, yend = yend))# The 2 version allows you to interpolate between endpoint aesthetics data2 < data.frame( x = c(data$x, data$xend), y = c(data$y, data$yend), group = rep(1:10, 2), colour = sample(letters[1:5], 20, TRUE) ) ggplot(data2) + geom_diagonal2(aes(x, y, group = group, colour = colour))# Use strength to control the steepness of the central region ggplot(data, aes(x, y, xend = xend, yend = yend)) + geom_diagonal(strength = 0.75, colour = 'red') + geom_diagonal(strength = 0.25, colour = 'blue')