gpt4 book ai didi

ggplot2 - 平滑 geom_ribbon

转载 作者:行者123 更新时间:2023-12-03 08:47:01 46 4
gpt4 key购买 nike

我用 geom_line 和 geom_ribbon 创建了一个图(图 1),结果还不错,但为了美观,我希望线条和丝带更平滑。我知道我可以使用 geom_smooth 作为线条(图 2),但我不确定是否可以平滑功能区。我可以为功能区的顶线和底线创建一条 geom_smooth 线(图 3),但是有什么办法可以填充这两行之间的空间吗?

enter image description here

enter image description here

enter image description here

最佳答案

实现您想要的目标的原则性方法是使用 mgcv 中的 gam() 函数将 GAM 模型拟合到您的数据,然后在预测变量值的更精细网格上将 Predict() 函数应用于该模型。网格可以覆盖由预测变量的观测值范围定义的跨度。下面的 R 代码通过一个具体示例说明了此过程。

# load R packages
library(ggplot2)
library(mgcv)

# simulate some x and y data
# x = predictor; y = response
x <- seq(-10, 10, by = 1)
y <- 1 - 0.5*x - 2*x^2 + rnorm(length(x), mean = 0, sd = 20)
d <- data.frame(x,y)

# plot the simulated data
ggplot(data = d, aes(x,y)) +
geom_point(size=3)

# fit GAM model
m <- gam(y ~ s(x), data = d)

# define finer grid of predictor values
xnew <- seq(-10, 10, by = 0.1)

# apply predict() function to the fitted GAM model
# using the finer grid of x values
p <- predict(m, newdata = data.frame(x = xnew), se = TRUE)
str(p)

# plot the estimated mean values of y (fit) at given x values
# over the finer grid of x values;
# superimpose approximate 95% confidence band for the true
# mean values of y at given x values in the finer grid
g <- data.frame(x = xnew,
fit = p<span class="math-container">$fit,
lwr = p$</span>fit - 1.96*p<span class="math-container">$se.fit,
upr = p$</span>fit + 1.96*p$se.fit)

head(g)

theme_set(theme_bw())

ggplot(data = g, aes(x, fit)) +
geom_ribbon(aes(ymin = lwr, ymax = upr), fill = "lightblue") +
geom_line() +
geom_point(data = d, aes(x, y), shape = 1)

如果您要使用 lm() 函数将多项式回归模型拟合到数据,则同样的原则也适用。

关于ggplot2 - 平滑 geom_ribbon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61029929/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com