R语言中gam绘图X轴标签批量重命名的报错解决方法
解决GAM模型绘图时批量修改带空格X轴标签的报错问题
你用gam()拟合的beta回归模型如下:
mod1 <- gam(severity ~ s(mean_rh, k = 8) + s(mean_temp, k = 10) + s(mean_ws, k =7) + s(avg_daily_rain, k = 7), family = betar(), data = dat_seasonal)
原本的绘图代码:
plot(mod1, pages = 1, all.terms = TRUE, rug = TRUE, residuals = TRUE, pch = 1, cex = 1, shade = TRUE, seWithMean = TRUE, shift = coef(mod1)[1])
尝试通过修改数据框列名批量替换X轴标签时,因为新标签包含空格,触发了str2lang()解析错误——空格会被当成语法分隔符,导致表达式解析失败。以下是两种批量修改标签的可行方案:
方案1:绘图时直接指定xlab参数
先定义变量名与目标标签的映射,再提取模型平滑项的变量名,批量生成对应标签后传入绘图函数:
# 定义变量名到目标标签的映射 label_map <- c( mean_temp = "Mean temperature", mean_ws = "Mean wind speed", mean_rh = "Mean relative humidity", avg_daily_rain = "Mean rain per rainy day" ) # 提取模型中所有平滑项的变量名 term_names <- sapply(mod1$smooth, function(x) x$label) # 生成对应X轴标签 x_labels <- label_map[term_names] # 传入xlab参数绘图 plot(mod1, pages = 1, all.terms = TRUE, rug = TRUE, residuals = TRUE, pch = 1, cex = 1, shade = TRUE, seWithMean = TRUE, shift = coef(mod1)[1], xlab = x_labels)
方案2:修改模型对象的term.labels属性
直接替换模型内置的项标签,后续绘图无需重复指定:
# 定义平滑项表达式到目标标签的映射 label_map <- c( "s(mean_rh, k = 8)" = "Mean relative humidity", "s(mean_temp, k = 10)" = "Mean temperature", "s(mean_ws, k =7)" = "Mean wind speed", "s(avg_daily_rain, k = 7)" = "Mean rain per rainy day" ) # 替换模型的term.labels mod1$term.labels <- label_map[mod1$term.labels] # 直接绘图,标签已自动替换 plot(mod1, pages = 1, all.terms = TRUE, rug = TRUE, residuals = TRUE, pch = 1, cex = 1, shade = TRUE, seWithMean = TRUE, shift = coef(mod1)[1])
这两种方法都避开了修改数据框列名带来的解析问题,实现批量替换带空格的X轴标签。
内容的提问来源于stack exchange,提问作者Ahsk
相关产品推荐
相关产品推荐

