将 panel.lmbands 添加到 R 中的点阵图时出错
Error while adding panel.lmbands to lattice plot in R
我想从 mosaic
包中添加 panel.lmbands
。我正在使用以下代码
library(lattice)
library(tidyverse)
library(hydroGOF)
library(mosaic)
library(latticeExtra)
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))))
)
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)
})
它returns我以下错误
Error in xyplot.formula(Petal.Length ~ Sepal.Length | Species, data = iris, : formal argument "panel" matched by multiple actual arguments
预期的输出如下所示
如何更正错误?
在这种情况下,您的错误消息非常有用 -- 您定义了面板参数两次,这是不允许的。您可以通过修改自定义面板功能来解决问题:
panel = function(x, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.lmbands(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
}
您也可以考虑使用 ggformula 而不是 lattice 进行绘图,因为这样可以更容易地堆叠图层。
这是使用 ggformula 绘制的核心图(没有您可以添加的自定义标签、注释等):
suppressPackageStartupMessages(library(ggformula))
gf_point(Petal.Length ~ Sepal.Length | ~ Species, data = iris, shape = 23) %>%
gf_lm(interval = "prediction", fill = "blue") %>%
gf_lm(interval = "confidence", fill = "red")
由 reprex package (v2.0.0)
于 2021-08-26 创建
有关 ggformula 的更多信息,请参阅 http://www.mosaic-web.org/ggformula/
我想从 mosaic
包中添加 panel.lmbands
。我正在使用以下代码
library(lattice)
library(tidyverse)
library(hydroGOF)
library(mosaic)
library(latticeExtra)
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))))
)
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)
})
它returns我以下错误
Error in xyplot.formula(Petal.Length ~ Sepal.Length | Species, data = iris, : formal argument "panel" matched by multiple actual arguments
预期的输出如下所示
如何更正错误?
在这种情况下,您的错误消息非常有用 -- 您定义了面板参数两次,这是不允许的。您可以通过修改自定义面板功能来解决问题:
panel = function(x, ...) {
i <- panel.number()
panel.xyplot(x, ...)
panel.lmbands(x, ...)
panel.key(as.expression(summ$ann[[i]]), points = FALSE)
}
您也可以考虑使用 ggformula 而不是 lattice 进行绘图,因为这样可以更容易地堆叠图层。
这是使用 ggformula 绘制的核心图(没有您可以添加的自定义标签、注释等):
suppressPackageStartupMessages(library(ggformula))
gf_point(Petal.Length ~ Sepal.Length | ~ Species, data = iris, shape = 23) %>%
gf_lm(interval = "prediction", fill = "blue") %>%
gf_lm(interval = "confidence", fill = "red")
由 reprex package (v2.0.0)
于 2021-08-26 创建有关 ggformula 的更多信息,请参阅 http://www.mosaic-web.org/ggformula/