I am trying to apply R/ggplot2: Collapse or remove segment of y-axis from scatter-plot to remove values from 25 to 75 from my plot's y axis.
However i do not get the result desired when I have grouped plot.
what is the best way to squeeze part of y axis to make plots clear.
library(scales)
squish_trans <- function(from, to, factor) {
trans <- function(x) {
if (any(is.na(x))) return(x)
# get indices for the relevant regions
isq <- x > from & x < to
ito <- x >= to
# apply transformation
x[isq] <- from + (x[isq] - from)/factor
x[ito] <- from + (to - from)/factor + (x[ito] - to)
return(x)
}
inv <- function(x) {
if (any(is.na(x))) return(x)
# get indices for the relevant regions
isq <- x > from & x < from + (to - from)/factor
ito <- x >= from + (to - from)/factor
# apply transformation
x[isq] <- from + (x[isq] - from) * factor
x[ito] <- to + (x[ito] - (from + (to - from)/factor))
return(x)
}
# return the transformation
return(trans_new("squished", trans, inv))
}
df <- data.frame(state = factor(c("CA", "NY", "TX", "CA", "NY", "CA", "NY", "TX")),
value = c(2,5,4,8,9,7,4,6),
rangeL = c(1,4,3,7,8,5,3,5),
rangeU = c(4,7,5,9,10,9,100,70),
grp = factor(c("x", "x","x","y", "y","z","z","z")))
df
df %>%
ggplot(aes(x=state, y= value, color = grp, group = grp)) +
geom_point(position=position_dodge(.7)) +
geom_errorbar(ymin = df$rangeL, ymax= df$rangeU, position=position_dodge(.7), width = 0.5) +
expand_limits(x = 0, y = 0) +
ylim(0, max(df$rangeU)) +
scale_y_continuous(trans = squish_trans(25, 75, 10),
breaks = c(0, 5, 10, 20, 25, 75, 100))