r语言 - 如何获得geom_smooth来绘制双曲线作为拟合曲线?



我正在使用ggplot2绘制已知处于双曲关系的两个变量。我想用geom_smooth添加一条拟合曲线。

geom_smooth(se = FALSE, method = "gam", formula = y ~ 1/x)

给了我一条直线。有可能强迫geom_smooth画出双曲线吗?

最小可复制示例:

n <- 100
x <- seq(n)
y <- rnorm(n, 50 + 30 * x^(-0.2), 1)
Data <- data.frame(x, y)
ggplot(data = Data, 
aes(x = x, y = y)) +
geom_point() +
geom_smooth(se = FALSE, method = "gam", formula = y ~ 1/x)

我不确定你可以在这里使用方法函数,因为它用于回归,而不适合像你提到的那样的数学曲线。最佳实践是创建带有图表的点状图,然后使用geom_smooth()geom_line()添加,如下所示,使用流行的iris数据集:

library(ggplot)
library(dplyr)
graph_hyperbole <- tibble(x = 0:10) %>%
mutate(y = 1/x)
ggplot(iris, aes(Petal.Length, Petal.Width)) + 
geom_point() +
geom_smooth(data = graph_hyperbole, aes(x = x, y = y))

我发布@bouncyball的评论,接受它作为正确答案:

你的公式需要调整:y ~ I(1/x)

n <- 100
x <- seq(n)
y <- rnorm(n, 50 + 30 * x^(-0.2), 1)
Data <- data.frame(x, y)
ggplot(data = Data, 
aes(x = x, y = y)) +
geom_point() +
geom_smooth(se = FALSE, method = "gam", formula = y ~ I(1/x))

最新更新