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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:15:59