Рисование только границ stat smooth в ggplot2
При использовании stat_smooth()
Есть ли способ удалить затененную область подгонки, но только нарисовать ее внешние границы? Я знаю, что могу удалить затененную область с помощью чего-то вроде:
geom_point(aes(x=x, y=y)) + geom_stat(aes(x=x, y=y), alpha=0)
Но как я могу сделать внешние границы его (внешние кривые) все еще видимыми как слабые черные линии?2 ответа:
Можно также использовать
geom_ribbon
сfill
= NA.gg <- ggplot(mtcars, aes(qsec, wt))+ geom_point() + stat_smooth( alpha=0,method='loess') rib_data <- ggplot_build(gg)$data[[2]] ggplot(mtcars)+ stat_smooth(aes(qsec, wt), alpha=0,method='loess')+ geom_point(aes(qsec, wt)) + geom_ribbon(data=rib_data,aes(x=x,ymin=ymin,ymax=ymax,col='blue'), fill=NA,linetype=1)
...и если по какой-то причине вы не хотите вертикальные полосы, вы можете просто использовать два слоя
geom_line
:ggplot(mtcars)+ stat_smooth(aes(qsec, wt), alpha=0,method='loess')+ geom_point(aes(qsec, wt)) + geom_line(data = rib_data,aes(x = x,y = ymax)) + geom_line(data = rib_data,aes(x = x,y = ymin))
Есть, скорее всего, более простые способы, но вы можете попробовать это в качестве начала. Я беру данные для доверительного интервала с помощью
ggbuild
, которые затем использую вgeom_line
# create a ggplot object with a linear smoother and a CI library(ggplot2) gg <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point() + geom_smooth(method = "lm") gg # grab the data from the plot object gg_data <- ggplot_build(gg) str(gg_data) head(gg_data$data[[2]]) gg2 <- gg_data$data[[2]] # plot with 'CI-lines' and the shaded confidence area ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point() + geom_smooth(method = "lm", se = TRUE, size = 1) + geom_line(data = gg2, aes(x = x, y = ymin), size = 0.02) + geom_line(data = gg2, aes(x = x, y = ymax), size = 0.02) # plot with 'CI-lines' but without confidence area ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point() + geom_smooth(method = "lm", se = FALSE, size = 1) + geom_line(data = gg2, aes(x = x, y = ymin), size = 0.02) + geom_line(data = gg2, aes(x = x, y = ymax), size = 0.02)