Make a tiebreaker function that can be used with qp.labels.
make.tiebreaker <- function(x.var,tiebreak.var){ force(x.var) force(tiebreak.var) function(d,...){ orig <- attr(d,"orig.data") xvals <- unique(orig[,x.var]) x <- unique(d[,x.var]) if(length(x)>1){ stop("labels are not aligned") } xvals <- xvals[order(abs(xvals-x))] group.dfs <- split(orig,orig$groups) m <- do.call(cbind,lapply(d$groups,function(g){ df <- group.dfs[[as.character(g)]] approx(df[,x.var],df[,tiebreak.var],xvals)$y })) ## useful for debugging: ##print(m) L <- lapply(1:nrow(m),function(i)m[i,]) do.call(order,L) } }
Please contact Toby Dylan Hocking if you are using directlabels or have ideas to contribute, thanks! |
Documentation website generated from source code version 2021.2.24 (git revision bb6db07 Mon, 14 Jun 2021 22:38:45 +0530) using inlinedocs. |
validate |