如何在格子图中添加多个模型评估参数?
How to add multiple model evaluation parameters in lattice plot?
我正在尝试在 lattice
图中自动添加多个模型评估参数。我正在使用以下代码
library(lattice)
library(tidyverse)
library(hydroGOF)
#Calculation of model evaluation parameters
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)
#Make multipanel plot
xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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))
这给了我下面的情节
现在如何使用 lattice
包获得以下图
编辑
虽然从马赛克 package
添加 panel.lmbands
到解决方案 (1) 和 (3) 可行,但我无法使用解决方案 (2) 实现它。这是代码
library(mosaic)
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,
panel = panel.lmbands,
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, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
})
p2
它returns我以下错误
Error in xyplot.formula(Petal.Length ~ Sepal.Length | Species, data = iris, :
formal argument "panel" matched by multiple actual arguments
预期输出如下所示
格子有三种方法。 summ
是在 (1) 中计算的,除了 RMSE
在 hydroGOF 中是 rmse
,我们添加了一个包含注释的 ann
列。 summ
也用在(2)和(3)中。 p
在 (1) 中使用与问题中相同的代码,并且在 (3) 中再次使用它而无需更改。全部使用 latticeExtra 中的 panel.key
,并且 (3) 还使用 latticeExtra 中的 layer
。
1) trellis.focus我们可以在事后使用trellis.focus/trellis.unfocus
修改面板
library(latticeExtra)
library(dplyr)
library(hydroGOF)
#Calculation of model evaluation parameters
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)
summ$ann <- lapply(1:nrow(summ), function(i) with(summ[i, ],
c(bquote(R^2 == .(Rsq)), bquote(RMSE == .(RMSE)), bquote(NSE == .(NSE))))
)
#Make multipanel plot
p <- xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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))
p
for(i in 1:nrow(summ)) {
trellis.focus("panel", i, 1)
pno <- panel.number()
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
trellis.unfocus()
}
2) 面板函数 我们定义指示面板函数,它利用panel.number()
绘制正确的文本。
p2 <- xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
})
p2
3) latticeExtra::layer 在 latticeExtra 中使用 layer
的图层允许以类似的方式使用 +
将图层添加到格子图这是在 ggplot2 中完成的。
p3 <- p
for(i in 1:nrow(summ)) {
p3 <- p3 +
layer(panel.key(as.expression(ann), points = FALSE),
data = list(ann = summ$ann[[i]]), packets = i)
}
p3
以上任何一项给出:
我正在尝试在 lattice
图中自动添加多个模型评估参数。我正在使用以下代码
library(lattice)
library(tidyverse)
library(hydroGOF)
#Calculation of model evaluation parameters
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)
#Make multipanel plot
xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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))
这给了我下面的情节
现在如何使用 lattice
包获得以下图
编辑
虽然从马赛克 package
添加 panel.lmbands
到解决方案 (1) 和 (3) 可行,但我无法使用解决方案 (2) 实现它。这是代码
library(mosaic)
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,
panel = panel.lmbands,
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, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
})
p2
它returns我以下错误
Error in xyplot.formula(Petal.Length ~ Sepal.Length | Species, data = iris, : formal argument "panel" matched by multiple actual arguments
预期输出如下所示
格子有三种方法。 summ
是在 (1) 中计算的,除了 RMSE
在 hydroGOF 中是 rmse
,我们添加了一个包含注释的 ann
列。 summ
也用在(2)和(3)中。 p
在 (1) 中使用与问题中相同的代码,并且在 (3) 中再次使用它而无需更改。全部使用 latticeExtra 中的 panel.key
,并且 (3) 还使用 latticeExtra 中的 layer
。
1) trellis.focus我们可以在事后使用trellis.focus/trellis.unfocus
修改面板
library(latticeExtra)
library(dplyr)
library(hydroGOF)
#Calculation of model evaluation parameters
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)
summ$ann <- lapply(1:nrow(summ), function(i) with(summ[i, ],
c(bquote(R^2 == .(Rsq)), bquote(RMSE == .(RMSE)), bquote(NSE == .(NSE))))
)
#Make multipanel plot
p <- xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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))
p
for(i in 1:nrow(summ)) {
trellis.focus("panel", i, 1)
pno <- panel.number()
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
trellis.unfocus()
}
2) 面板函数 我们定义指示面板函数,它利用panel.number()
绘制正确的文本。
p2 <- xyplot(Petal.Length ~ Sepal.Length | Species, data = iris, pch = 23,
layout=c(3,1), type = c("p", "r"),
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, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
})
p2
3) latticeExtra::layer 在 latticeExtra 中使用 layer
的图层允许以类似的方式使用 +
将图层添加到格子图这是在 ggplot2 中完成的。
p3 <- p
for(i in 1:nrow(summ)) {
p3 <- p3 +
layer(panel.key(as.expression(ann), points = FALSE),
data = list(ann = summ$ann[[i]]), packets = i)
}
p3
以上任何一项给出: