如何在xyplot的每个面板中为各回归曲线添加R²值
在lattice的xyplot中为回归曲线添加R²值
你可以通过以下方式给每条回归曲线添加对应的R²值:
- 对每个拟合的模型,用
summary(model)$r.squared提取R²值 - 用
sprintf()格式化R²的显示文本,控制小数位数让输出更美观 - 用
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
相关产品推荐
相关产品推荐

