在ggplot中拟合二次曲线
Fitting a quadratic curve in ggplot
这是我的示例数据。我想在单个图中针对 x1
绘制 y1
和 y2
。这就是我所做的:
library(ISLR)
library(ggplot2)
y1<-scale(Auto$horsepower,scale = T,center=T)
y2<-scale(Auto$weight,scale = T,center=T)
x1<-Auto$mpg
df<-data.frame(y1,y2,x1)
p<-ggplot(df,aes(x=x1)) +
geom_point(aes(y = y1), shape = 16) +
geom_point(aes(y = y2), shape = 2)
我想为 y1 和 y2 插入一条关于 x 的二次线。我这样做了:
p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
它抛出一个错误:
Warning message:
Computation failed in `stat_smooth()`:
variable lengths differ (found for 'x')
除此之外,stat_smooth命令只会放置一条二次线,而我需要两条二次线
对于 y1
和 y2
。
我是如何在 R 中做到这一点的?
谢谢
您应该添加两个 stat_smooth()
调用并添加 aes()
以显示要使用哪个 y
。
ggplot(df,aes(x=x1)) +
geom_point(aes(y = y1), shape = 16) +
geom_point(aes(y = y2), shape = 2) +
stat_smooth(aes(y = y1),method = "lm", formula = y ~ x + I(x^2), size = 1) +
stat_smooth(aes(y = y2),method = "lm", formula = y ~ x + I(x^2), size = 1, color = "red")
或者制作长格式 table 然后你只需要调用一次 stat_smooth()
和 geom_point()
.
library(tidyr)
df_long <- df %>% gather(variable, value, y1:y2)
ggplot(df_long, aes(x1, value, color = variable)) +
geom_point() +
stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
这是我的示例数据。我想在单个图中针对 x1
绘制 y1
和 y2
。这就是我所做的:
library(ISLR)
library(ggplot2)
y1<-scale(Auto$horsepower,scale = T,center=T)
y2<-scale(Auto$weight,scale = T,center=T)
x1<-Auto$mpg
df<-data.frame(y1,y2,x1)
p<-ggplot(df,aes(x=x1)) +
geom_point(aes(y = y1), shape = 16) +
geom_point(aes(y = y2), shape = 2)
我想为 y1 和 y2 插入一条关于 x 的二次线。我这样做了:
p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
它抛出一个错误:
Warning message:
Computation failed in `stat_smooth()`:
variable lengths differ (found for 'x')
除此之外,stat_smooth命令只会放置一条二次线,而我需要两条二次线
对于 y1
和 y2
。
我是如何在 R 中做到这一点的?
谢谢
您应该添加两个 stat_smooth()
调用并添加 aes()
以显示要使用哪个 y
。
ggplot(df,aes(x=x1)) +
geom_point(aes(y = y1), shape = 16) +
geom_point(aes(y = y2), shape = 2) +
stat_smooth(aes(y = y1),method = "lm", formula = y ~ x + I(x^2), size = 1) +
stat_smooth(aes(y = y2),method = "lm", formula = y ~ x + I(x^2), size = 1, color = "red")
或者制作长格式 table 然后你只需要调用一次 stat_smooth()
和 geom_point()
.
library(tidyr)
df_long <- df %>% gather(variable, value, y1:y2)
ggplot(df_long, aes(x1, value, color = variable)) +
geom_point() +
stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)