```##' link between taxa
##'
##'
##' @param taxa1 taxa1, can be label or node number
##' @param taxa2 taxa2, can be label or node number
##' @param curvature A numeric value giving the amount of curvature.
##' Negative values produce left-hand curves,
##' positive values produce right-hand curves, and zero produces a straight line.
##' @param arrow specification for arrow heads, as created by arrow().
##' @param arrow.fill fill color to usse for the arrow head (if closed). `NULL` means use `colour` aesthetic.
##' @return ggplot layer
##' @export
##' @importFrom ggplot2 GeomCurve
##' @author Guangchuang Yu
geom_taxalink <- function(taxa1, taxa2, curvature=0.5, arrow = NULL, arrow.fill = NULL, ...) {
position = "identity"
show.legend = NA
na.rm = TRUE
inherit.aes = FALSE

mapping <- aes_(x=~x, y=~y, node=~node, label=~label, xend=~x, yend=~y)

mapping=mapping,
data = NULL,
geom=GeomCurve,
position='identity',
show.legend=show.legend,
inherit.aes = inherit.aes,
params = list(taxa1 = taxa1,
taxa2 = taxa2,
curvature = curvature,
na.rm = na.rm,
arrow = arrow,
arrow.fill = arrow.fill,
...),
check.aes = FALSE
)
}

compute_group = function(self, data, scales, params, taxa1, taxa2) {
node1 <- taxa2node(data, taxa1)
node2 <- taxa2node(data, taxa2)

x <- data\$x
y <- data\$y

data.frame(x = x[node1],
xend = x[node2],
y = y[node1],
yend = y[node2])

},
required_aes = c("x", "y", "xend", "yend")
)

```