2015-06-01 30 views
3

glmnet图例标签错误,我从这个职位(Adding labels on curves in glmnet plot in R)修改函数传说添加到情节如下:与R中

library(glmnet) 
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1]) 

lbs_fun <- function(fit, ...) { 
     L <- length(fit$lambda) 
     x <- log(fit$lambda[L]) 
     y <- fit$beta[, L] 
     labs <- names(y) 
     text(x, y, labels=labs, ...) 
     legend('topright', legend=labs, col=1:length(labs), lty=1) # <<< ADDED BY ME 
} 
plot(fit, xvar="lambda") 
lbs_fun(fit) 

enter image description here

但是,我得到的文本之间的不匹配情节和传说中的标签。变量“am”显然颜色不正确。错误在哪里?谢谢你的帮助。

回答

4

plot(fit, xvar="lambda")利用函数matplot。默认情况下,matplot使用6种颜色并回收它们。所以,你必须创建相应的传说:

lbs_fun <- function(fit, ...) { 
     L <- length(fit$lambda) 
     x <- log(fit$lambda[L]) 
     y <- fit$beta[, L] 
     labs <- names(y) 
     text(x, y, labels=labs, ...) 
     legend('topright', legend=labs, col=1:6, lty=1) # only 6 colors 
} 

enter image description here

+0

我认为这是在我有超过6个变量后为我错误标记颜色。 – Hatshepsut

1

您可以在plot调用指定的颜色,以配合你找了传奇色彩:

lbs_fun <- function(fit, ...) { 
     L <- length(fit$lambda) 
     x <- log(fit$lambda[L]) 
     y <- fit$beta[, L] 
     labs <- names(y) 
     text(x, y, labels=labs, ...) 
     legend('topright', legend=labs, col=1:length(labs), lty=1) # <<< ADDED BY ME 
} 
plot(fit, xvar="lambda", col=1:dim(coef(fit))[1]) 
lbs_fun(fit) 

enter image description here