ggplot 结合 stat_smooth 用于 R 中的某些因子水平
ggplot combined stat_smooth for some factor levels in R
我的数据有 3 个因子水平,每个水平都有一个 x 和 y 坐标。我正在使用 ggplot 创建一个散点图,我想在其中添加平滑。但是,我希望平滑只使用 3 个因子级别中的 2 个。结果应该是这 2 个因子级别的数据点的单一拟合,但所有 3 个级别都是分散的。
示例:
library(ggplot2)
set.seed(123)
data <- data.frame(x=rnorm(300), y=rnorm(300), f=rep(c("a","b","c"), 100))
ggplot(data, aes(x,y,color=f)) +
geom_point() +
stat_smooth(method="gam", formula=y~s(x), se=F)
ggplot(data[data$f %in% c("a","b"),], aes(x,y)) +
geom_point(aes(color=f)) +
stat_smooth(method="gam", formula=y~s(x), se=F)
如您所见,第一张图片针对所有因素分别进行了平滑处理。第二个结合了因子水平“a”和“b”的数据,但那是因为我从数据中删除了“c”。
如何保留第一张图像的散点图并覆盖第二张图像的平滑拟合?
stat_smooth
有一个 data
参数,您可以使用它来构建子集:
ggplot(data, aes(x,y,color=f)) +
geom_point() +
stat_smooth(data=subset(data, f!="c"),
inherit.aes=F, aes(x, y),
method="gam", formula=y~s(x),
se=F)
此外,您可以使用inherit.aes=FALSE
更改美学贴图。
我的数据有 3 个因子水平,每个水平都有一个 x 和 y 坐标。我正在使用 ggplot 创建一个散点图,我想在其中添加平滑。但是,我希望平滑只使用 3 个因子级别中的 2 个。结果应该是这 2 个因子级别的数据点的单一拟合,但所有 3 个级别都是分散的。
示例:
library(ggplot2)
set.seed(123)
data <- data.frame(x=rnorm(300), y=rnorm(300), f=rep(c("a","b","c"), 100))
ggplot(data, aes(x,y,color=f)) +
geom_point() +
stat_smooth(method="gam", formula=y~s(x), se=F)
ggplot(data[data$f %in% c("a","b"),], aes(x,y)) +
geom_point(aes(color=f)) +
stat_smooth(method="gam", formula=y~s(x), se=F)
如您所见,第一张图片针对所有因素分别进行了平滑处理。第二个结合了因子水平“a”和“b”的数据,但那是因为我从数据中删除了“c”。
如何保留第一张图像的散点图并覆盖第二张图像的平滑拟合?
stat_smooth
有一个 data
参数,您可以使用它来构建子集:
ggplot(data, aes(x,y,color=f)) +
geom_point() +
stat_smooth(data=subset(data, f!="c"),
inherit.aes=F, aes(x, y),
method="gam", formula=y~s(x),
se=F)
此外,您可以使用inherit.aes=FALSE
更改美学贴图。