gpt4 book ai didi

r - `geom_smooth` 公式中有变次多项式

转载 作者:行者123 更新时间:2023-12-05 01:37:37 26 4
gpt4 key购买 nike

我有以下 ggplot2 代码,可以绘制不同阶数的多个多项式拟合:

library(ggplot2)

set.seed(1234)
n = 400
x = rnorm(n, sd=0.4)
y = -x + 2*x^2 - 3*x^3 + rnorm(n,sd=0.75)
df = data.frame(x=x,y=y)

deg = c(1,2,3,10)
cols = c("red","green","blue","orange")
ggplot(df, aes(x=x,y=y)) +
geom_point() +
geom_smooth(method = "lm", formula= y~poly(x,deg[1]), se=F, col=cols[1]) +
geom_smooth(method = "lm", formula= y~poly(x,deg[2]), se=F, col=cols[2]) +
geom_smooth(method = "lm", formula= y~poly(x,deg[3]), se=F, col=cols[3]) +
geom_smooth(method = "lm", formula= y~poly(x,deg[4]), se=F, col=cols[4])

我想避免为每个度数重复 geom_smooth 行。但我不知道如何让 geom_smooth 理解通过变量传递的动态度数。上面有更优雅的解决方案吗?如果不需要显式传递 cols 向量也能自动更改颜色,那就太好了。 (默认配色方案很好)。

我曾尝试通过一个循环使用 as.formula(paste0("y~poly(x,",deg[i],")")) ,但运气不佳(并且循环不' 似乎是使用 ggplot 的正确方法。)

最佳答案

您可以将绘图元素列表添加到 ggplot,这样您就可以使用 map 创建一个包含四个 geom_smooth 调用的列表,一个用于 中的每个度数>度数

library(tidyverse)

ggplot(df, aes(x=x,y=y)) +
geom_point() +
map(1:length(deg),
~geom_smooth(method="lm", formula=y~poly(x, deg[.x]), se=F, col=cols[.x]))

如果您愿意,您还可以添加图例。例如:

ggplot(df, aes(x=x,y=y)) + 
geom_point(colour="grey60") +
map(1:length(deg),
~geom_smooth(method="lm", formula=y~poly(x, deg[.x]), se=F,
aes(color=factor(deg[.x])))) +
scale_colour_manual(name="Degree", breaks=deg, values=set_names(cols, deg)) +
theme_bw() +
theme(legend.text.align=1)

enter image description here

如果您对默认颜色感到满意,请将 scale_colour_manual 行更改为:

scale_colour_discrete(name="Degree", breaks=deg) +

关于r - `geom_smooth` 公式中有变次多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60841611/

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