You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整cva.glmnet()绘图的图例位置并添加图例标题

解决cva.glmnet绘图图例遮挡及自定义问题

针对cva.glmnet绘图的图例遮挡问题,这里提供两种实用的解决方法,帮你将图例移到右侧并添加标题:

方法一:基于基础绘图手动调整图例

直接利用基础绘图的参数先隐藏默认图例,再手动添加自定义位置的图例:

set.seed(100)
library(glmnet)
library(dplyr)

a <- runif(1000) %>% round()
b <- runif(1000) %>% round()
c <- runif(1000) %>% round()
d <- runif(1000) %>% round()
datatest <- as.data.frame(cbind(a,b,c,d))
cvtest <- cva.glmnet(d ~ a+b+c, data= datatest, family = "binomial")

# 绘制不带默认图例的CV曲线
plot(cvtest, legend = FALSE)

# 手动添加右侧图例,包含标题
legend(
  "right",
  legend = paste0("α = ", round(cvtest$alpha, 3)), # 对应每个alpha值
  col = 1:length(cvtest$alpha), # 匹配曲线颜色
  lty = 1, # 线型和原图保持一致
  title = "正则化参数α", # 图例标题
  bty = "n" # 可选:去掉图例边框,避免遮挡
)

方法二:用ggplot2重绘(更灵活的自定义)

如果需要更自由的绘图控制,可以提取cva.glmnet的CV数据,用ggplot2重新绘制:

library(ggplot2)
library(purrr)
library(tibble)

# 提取所有alpha对应的交叉验证数据
cv_data <- map_dfr(cvtest$modlist, function(cv_model) {
  tibble(
    alpha = cv_model$alpha,
    lambda = cv_model$lambda,
    cv_error = cv_model$cvm
  )
})

# 绘制自定义CV曲线
ggplot(cv_data, aes(x = log(lambda), y = cv_error, color = factor(round(alpha, 3)))) +
  geom_line(linewidth = 1) +
  labs(
    x = "对数化Lambda值",
    y = "交叉验证误差",
    color = "正则化参数α" # 这里直接设置图例标题
  ) +
  theme_minimal() +
  theme(
    legend.position = "right", # 将图例移到右侧
    legend.box.background = element_rect(color = "gray") # 可选:给图例加边框
  )

两种方法各有优势:方法一操作简单,适合快速调整;方法二支持更多自定义样式,比如修改坐标轴、添加主题等,适合需要精细化绘图的场景。

内容的提问来源于stack exchange,提问作者anon1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:55:03