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

如何在xyplot的每个面板中为各回归曲线添加R²值

在lattice的xyplot中为回归曲线添加R²值

你可以通过以下方式给每条回归曲线添加对应的R²值:

  1. 对每个拟合的模型,用summary(model)$r.squared提取R²值
  2. 用sprintf()格式化R²的显示文本,控制小数位数让输出更美观
  3. 用panel.text()在面板的合适位置(比如曲线末端附近)添加文本,颜色和对应曲线保持一致

修改后的完整代码如下:

xyplot(
  Petal.Width  ~ Petal.Length | Species,
  data = iris,
  panel = function(x, y, ...) {
    panel.xyplot(x, y, ...)
    
    # 线性回归曲线 + R²标注
    mod1 <- lm(y~x)
    r2_1 <- summary(mod1)$r.squared
    panel.abline(mod1, col='#0080ff')
    panel.text(max(x), predict(mod1, newdata=data.frame(x=max(x))),
               labels = sprintf("R² = %.3f", r2_1),
               col='#0080ff', pos=3, cex=0.8)
    
    # 二次多项式回归曲线 + R²标注
    mod2 <- lm(y~poly(x, 2))
    r2_2 <- summary(mod2)$r.squared
    panel.curve(predict(mod2, newdata=data.frame(x=x)), col='#ff8000', lwd=2)
    panel.text(max(x), predict(mod2, newdata=data.frame(x=max(x))),
               labels = sprintf("R² = %.3f", r2_2),
               col='#ff8000', pos=3, cex=0.8)
    
    # 三次多项式回归曲线 + R²标注
    mod3 <- lm(y~poly(x, 3))
    r2_3 <- summary(mod3)$r.squared
    panel.curve(predict(mod3, newdata=data.frame(x=x)), col='#ff00ff', lwd=2)
    panel.text(max(x), predict(mod3, newdata=data.frame(x=max(x))),
               labels = sprintf("R² = %.3f", r2_3),
               col='#ff00ff', pos=3, cex=0.8)
  },
  grid = TRUE
)

细节调整说明:

  • pos=3表示文本在指定坐标的上方,你可以根据图表情况换成pos=4(右侧),或者直接手动指定固定坐标(比如x=mean(x), y=max(y))避免文本重叠
  • cex=0.8用于缩小文本尺寸,让整体布局更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:21