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 |