If left or right edges of the text are going out of the plotting region, then decrease cex until it fits. We call calc.boxes inside, so you should set cex before using this.
reduce.cex.lr <- structure(function(d,...){ d <- calc.boxes(d) l <- xlimits() positive.part <- function(x)ifelse(x>0,x,0) right <- positive.part(d$right-l[2]) left <- positive.part(l[1]-d$left) w <- d$right-d$left if(is.null(d$cex)){ d$cex <- 1 } d$cex <- (w-right)/w * (w-left)/w * d$cex calc.boxes(d) },ex=function(){ if(require(ElemStatLearn)){ pros <- subset(prostate,select=-train,train==TRUE) ycol <- which(names(pros)=="lpsa") x <- as.matrix(pros[-ycol]) y <- pros[[ycol]] library(lars) fit <- lars(x,y,type="lasso") beta <- scale(coef(fit),FALSE,1/fit$normx) arclength <- rowSums(abs(beta)) library(reshape2) path <- data.frame(melt(beta),arclength) names(path)[1:3] <- c("step","variable","standardized.coef") library(ggplot2) p <- ggplot(path,aes(arclength,standardized.coef,colour=variable))+ geom_line(aes(group=variable)) ## the legend isn't very helpful. print(p) ## add direct labels at the end of the lines. direct.label(p, "last.points") ## on my screen, some of the labels go off the end, so we can use ## this Positioning Method to reduce the text size until the labels ## are on the plot. direct.label(p, list("last.points","reduce.cex.lr")) ## the default direct labels for lineplots are similar. direct.label(p) } })
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 |