Sometimes there is 1 label that is placed oddly by another Positioning Function. This function can be used to manually place that label in a good spot.
dl.move <- structure(function # Manually move a direct label
### Sometimes there is 1 label that is placed oddly by another
### Positioning Function. This function can be used to manually place
### that label in a good spot.
(group,
### Group to change.
x,
### Horizontal position of the new label.
y,
### Vertical position of the new label. If missing(y) and !missing(x)
### then we will calculate a new y value using linear interpolation.
...
### Variables to change for the specified group
){
L <- list(...)
pos <- list()
if(!missing(x))pos$x <- x
if(!missing(y))pos$y <- y
pf <- function(d,...,axes2native){
native <- axes2native(do.call(data.frame,pos))
## first convert user-specified axes units to cm
for(var in names(pos)){
u <- unit(native[[var]],"native")
L[[var]] <- convertUnit(u,"cm",var,"location",var,"location")
}
v <- d$groups==group
for(N in names(L))
d[v,N] <- L[[N]]
## maybe generalize this to be symmetric on x and y one day?
if("x" %in% names(L) && (!"y" %in% names(L))){
orig <- attr(d,"orig.data")
orig <- orig[orig$groups==group,]
## do linear interpolation to find a good y-value
f <- with(orig,approxfun(x,y))
d[v,"y"] <- f(L$x)
}
d
}
pf
### A Positioning Function that moves a label into a good spot.
},ex=function(){
library(ggplot2)
library(lattice)
scatter <- xyplot(jitter(cty)~jitter(hwy),mpg,groups=class,aspect=1)
dlcompare(list(scatter),
list("extreme.grid",
`+dl.move`=list(extreme.grid,dl.move("suv",15,15))))
p <- qplot(log10(gamma),rate,data=svmtrain,group=data,colour=data,
geom="line",facets=replicate~nu)
adjust.kif <- dl.move("KIF11",-0.9,hjust=1,vjust=1)
dlcompare(list(p+xlim(-8,7)),
list("last.points",
`+dl.move`=list(last.points,adjust.kif)))
})
| 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 |