library(tidyverse)
## -- Attaching packages ------------------------------------------------------------------------------ tidyverse 1.2.1 --
## v ggplot2 3.1.0     v purrr   0.2.5
## v tibble  1.4.2     v dplyr   0.7.7
## v tidyr   0.8.2     v stringr 1.3.1
## v readr   1.1.1     v forcats 0.3.0
## -- Conflicts --------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
set.seed(20181108)

mean_sdl_squish <- function(...) {
  dplyr::mutate(
    ggplot2::mean_sdl(...),
    ymin = scales::squish(ymin, c(0, max(ymax))))
}

d <- rpois(1000, sample(c(1, 10), size = 1000, replace = TRUE)) %>%
  as_tibble()
d
## # A tibble: 1,000 x 1
##    value
##    <int>
##  1     0
##  2     1
##  3     2
##  4     8
##  5     4
##  6     6
##  7     0
##  8     2
##  9     1
## 10     1
## # ... with 990 more rows
ggplot(d) +
  aes(y = value) +
  stat_summary(aes(color = "mean_sdl", x = "a"), fun.data = mean_sdl) +
  stat_summary(aes(color = "mean_sdl_squish", x = "b"), fun.data = mean_sdl_squish)