如何解决如何使用 geom_smooth() 计算整个平滑系列并使用 facet_wrap() 显示每一个?
在 geom_smooth()
的文档中,有一个示例展示了如何将 B 样条平滑拟合到 tidyverse mpg dataset 的 hwy
与 displ
列,使用 df=3
的 bs()
函数的参数设置:
我想重复相同的示例,但不是仅使用 df
参数的单个设置计算单个平滑,而是想使用一系列 df
值(例如,3,5,7,9) 来计算一系列平滑,然后使用 facet_wrap()
在单独的面板中显示每个平滑(并且作为一个小补充,我还想显示灰色阴影平滑曲线周围的置信区间)。但是,我无法弄清楚我应该使用什么语法,或者 ggplot2 是否甚至可以灵活地直接在 geom_smooth()
内部支持这样的计算。
我在下面发布了一个 MWE:
library(tidyverse)
library(splines)
# ---- Preface with optional additional problem context ----
# This fits 4 different B-splines to the "hwy" vs. "displ" columns of the
# tidyverse "mpg" tibble,with the bs() df parameter set to c(3,9).
# This is essentially representative of the kind of result I want,except
# that instead of computing it externally and saving the result to a list
# as I've done here,I want to do it automatically inside of geom_smooth().
fitobj <- list()
for(ii in seq(3,9,2)) {
fitobj[[as.character(ii)]] <- lm(formula = hwy ~ bs(displ,df=ii),data=mpg)
}
# ---- MWE really starts here ----
# Make 4 identical copies of the "mpg" tibble,with an extra column tacked
# onto the right containing values 3,9
mpg_rep <- NULL
for(ii in seq(3,2)) {
tbl <- mpg
tbl$splinedf <- ii
mpg_rep <- bind_rows(mpg_rep,tbl)
}
# Make a baseline plot; smooths will be appended afterward
plt <- ggplot(mpg_rep,aes(x=displ,y=hwy,group=splinedf)) +
geom_point() +
facet_wrap(~splinedf)
# This does _almost_ what I want,except that instead of plotting a different
# smooth in each panel,it plots the same smooth four times redundantly
print(plt + geom_smooth(method = lm,formula = y ~ bs(x,df=3)))
# This looks like it has sort of the right syntax to do what I want,however
# it returns an error message; I guess perhaps because I'm not allowed to
# reference an aesthetic like this inside a formula?
print(plt + geom_smooth(method = lm,df=splinedf)))
这是一个示例输出,看起来几乎像我想要的,除了我想要 4 次不同的平滑而不是 4 次相同的平滑:
我如何修改 MWE 以使其完全符合我的要求?
解决方法
您可以Error occurred during initialization of VM
平滑图层以添加到图中,同时提供新的方面变量。
lapply()
由 reprex package (v1.0.0) 于 2021 年 4 月 21 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。