Установите ограничения на затенение доверительного интервала линии лесса в ggplot
У меня проблема с отображением линий лесса в ggplot. У меня есть несколько переменных, ни одна из которых не может опускаться ниже нуля, например, высоты, веса и численности. Я пытаюсь представить эти данные в ggplot с линией лесса. Используя некоторые составленные данные:
library(ggplot2)
df <- as.data.frame(rep(1:7, each = 5))
df[,2] <- c(0,1,5,0,6,0,7,2,9,1,1,18,4,2,34,8,18,24,56,12,12,18,24,63,48,
40,70,53,75,98,145,176,59,98,165)
names(df) <- c("x", "y")
ggplot(df, aes(x=x, y=y)) +
geom_point() +
geom_smooth() +
scale_y_continuous(limits = c(-20,200))
Это было бы хорошо, за исключением того, что заштрихованная область, показывающая доверительные интервалы вокруг сглаженной линии, опускается ниже нуля, и рецензент указал, что это невозможно, и попросил меня это изменить. Я думал, что это легко сделать, установив нижний предел на оси Y на ноль:
ggplot(df, aes(x=x, y=y)) +
geom_point() +
geom_smooth() +
scale_y_continuous(limits = c(0,200))
Но это делает часть затененной области вокруг лессовой линии исчезающей. Есть ли способ заставить график работать с осью y, ограниченной нулем, чтобы часть затененной области была обрезана, или установить ограничение на линию лесса в первую очередь, чтобы она не создавала затененную область? регион, который идет ниже нуля?
2 ответа
Мы можем рассчитать переопределить ymin
эй stat_smooth
(обратите внимание на разницу с geom_smooth
):
ggplot(df, aes(x=x, y=y)) +
geom_point() +
stat_smooth(geom='ribbon', aes(ymin = ifelse(..ymin.. < 0, 0, ..ymin..)),
alpha = .3) +
geom_smooth(se = FALSE) +
scale_y_continuous(limits = c(-20,200))
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Создано в 2018-05-22 пакетом представлением (v0.2.0).
ggplot(df, aes(x=x, y=y)) +
geom_point() +
geom_smooth() +
coord_cartesian(ylim = c(0,200))