从R中的乳胶表达式向量创建ggplot2图例

我有以下R代码,我希望图例中的beta_i是实际的希腊字母beta。请忽略dansih评论。该代码应显示出岭回归的求解路径。实际的代码要长得多,有多个图具有相同的问题。

library(latex2exp)
library(glmnet)
library(MASS)
library(ggplot2)
library(reshape)
library(gridExtra)

set.seed(10)
Y = rnorm(100)
Y = scale(Y)
X=matrix(rnorm(100*8),ncol=8)
X = scale(X)

fitR = glmnet(X,Y, alpha = 0)
beta = coef(fitR)

temp = as.data.frame(as.matrix(beta)) #Laver til dataframe
temp$coef = row.names(temp) #Danner ny kolonne med koefficientnavne
temp = temp[temp$coef != "(Intercept)",] #Fjerner interceptet, der er 0, da normaliseret.
temp = reshape::melt(temp, id = "coef") #Slår de 100 tabeller sammen
temp$variable = as.numeric(gsub("s", "", temp$variable)) #Omdøber variabelnavne
temp$lambda = fitR$lambda[temp$variable+1] #Henter lambdaer
temp$coef = paste("beta_", gsub("V", "", temp$coef), sep="")


plot1 = ggplot(temp, aes(lambda, value, color = coef)) + 
    xlim(0,75) +
    geom_line() + 
    ggtitle(TeX("Ridge estimater mod $\\lambda$"))+
        xlab(TeX("$\\lambda$")) + ylab("Estimat")+
guides(color = guide_legend(title = "")) +
        theme_bw() + 
        theme(legend.key.width = unit(3,"lines"))

grid.arrange(plot1)

我试过没有运气写:

ggplot(temp, aes(lambda, value, color = paste('TeX("$\\', coef, '$")', sep=''))

但这会导致错误:“ Fejl:无法将ggproto对象一起添加。您是否忘记了将此对象添加到ggplot对象?”。

Inspired by this and this post, I replaced the line

guides(color = guide_legend(title = "")) +

scale_color_discrete(labels = parse(text= paste("beta[", 1:8, "]", sep=""))) +

这确实解决了我的问题。但是我有两个问题。首先,当我在其余的代码中使用LaTeX时,我最终使用非LaTeX表示法“ beta [i]”而不是乳胶样式的“ beta_i”。第二,这仅起作用,因为在我的情况下,temp $ coef中的所有入口都由“ beta_i”组成。如果这8个入口是

temp$coef = c("alpha_1", "beta_2", ..., "theta_8")

那么我将无法做到这一点。

所以我的问题是这样的: 给定一个适用于乳胶的表达式向量(例如c(alpha_1,...,theta_8)),是否有办法使用该向量的名称在ggplot中构建图例?

由于这是我在这里的第一篇文章,如果我需要更改任何内容,请告诉我。

评论