如何在lattice绘图中添加多模型评估参数并解决panel参数冲突
错误原因
你的报错是因为xyplot函数中重复传入了panel参数,R无法识别该调用哪个面板渲染逻辑,直接触发参数匹配冲突。
解决方案
- 先为统计结果表新增标注文本列,将三个评估指标拼接为多行显示的文本内容
- 仅保留一个自定义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
相关产品推荐
相关产品推荐

