Установите ограничения на затенение доверительного интервала линии лесса в ggplot - PullRequest
0 голосов
/ 22 мая 2018

У меня проблема с отображением строк лесса в 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))

enter image description here

Это было бы хорошо, за исключением того, что заштрихованная область, показывающая доверительные интервалы вокруг сглаженной линии, опускается ниже нуляи рецензент указал, что это невозможно, и попросил меня это изменить.Я думал, что это можно легко сделать, установив нижний предел по оси Y на ноль:

ggplot(df, aes(x=x, y=y)) +
  geom_point() +
  geom_smooth() +
  scale_y_continuous(limits = c(0,200))

enter image description here

Но это делает часть затененнойТерритория вокруг лессовой линии исчезает.Есть ли способ заставить график работать с осью y, ограниченной нулем, чтобы часть затененной области была обрезана, или установить ограничение на линию лесса в первую очередь, чтобы она не создавала затененную область?область, которая идет ниже нуля?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Мы можем вычислить переопределение ymin aes 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).

0 голосов
/ 22 мая 2018
 ggplot(df, aes(x=x, y=y)) +
   geom_point() +
   geom_smooth() +
   coord_cartesian(ylim = c(0,200))
...