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

如何在lattice绘图中添加多模型评估参数并解决panel参数冲突

错误原因

你的报错是因为xyplot函数中重复传入了panel参数,R无法识别该调用哪个面板渲染逻辑,直接触发参数匹配冲突。

解决方案

  1. 先为统计结果表新增标注文本列,将三个评估指标拼接为多行显示的文本内容
  2. 仅保留一个自定义panel函数,在函数内部先调用panel.lmbands完成散点、拟合线、置信/预测区间的绘制,再调用文本渲染函数添加对应分面的评估指标

完整可运行代码

library(lattice)
library(tidyverse)
library(hydroGOF)
library(mosaic)

# 计算模型评估参数并生成标注文本
summ <- iris %>% 
  group_by(Species) %>% 
  summarise(Rsq = cor(Sepal.Length, Petal.Length)^2,
            RMSE = RMSE(Sepal.Length, Petal.Length),
            NSE = NSE(Sepal.Length, Petal.Length)) %>% 
  mutate_if(is.numeric, round, digits=2) %>% 
  # 拼接多行标注文本
  mutate(ann = paste0("R² = ", Rsq, "\nRMSE = ", RMSE, "\nNSE = ", NSE))

# 绘制带区间和评估指标的分面图
p2 <- xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23, 
             layout=c(3,1), 
             band.lty = c(conf =2, pred = 1), 
             band.lwd =c(conf =1, pred = 1),
             npts = 500,
             scales=list(cex=c(1.4,1.4), alternating=1, relation = "free"),
             xlab = list(label="Sepal Length", fontsize=20),
             ylab = list(label="Petal Length", fontsize=20),
             panel = function(x, y, ...) {
               # 先调用panel.lmbands绘制基础元素:散点、拟合线、置信/预测区间
               panel.lmbands(x, y, ...)
               # 获取当前分面序号,匹配对应标注文本
               i <- panel.number()
               # 在分面左上角添加指标文本,adj参数控制对齐方式
               panel.text(x = min(x), y = max(y), labels = summ$ann[i], 
                          adj = c(0, 1), cex = 1.1)
             })
p2

参数调整说明

如果觉得指标文本位置不合适,可以调整panel.text的x、y坐标,或者调整adj参数控制对齐方式,也可以修改cex参数调整文本大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:15:01