Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Define starting value different than zero for geom_area()

Tags:

r

ggplot2

I would like to shift the starting y-level of geom_area() away from zero. This is in the following example the 1st function call is okay, but how can I rectify the plot for the 2nd call:

library(ggplot2)

set.seed(123)

myplot <- function (split.value) {
  year <- (2000:2017)
  index <- rnorm(18, split.value,5)
  interp <- approx(year, index, n=1000)
  df <- data.frame(year = interp$x,
                   index = interp$y,
                   valence = ifelse(interp$y <= split.value, "pos", "neg"),
                   stringsAsFactors = FALSE)
  ggplot(df, aes(x = year, y = index)) +
    geom_area(aes(fill = valence), alpha = 0.5) +
    geom_line() +
    geom_hline(yintercept = split.value) +
    scale_fill_manual(values=c("green", "red"), guide=FALSE) +
    scale_x_continuous(expand=c(0, 0))
} # cf. R Graphics Cookbook

myplot(0) # o.k. (with more interpolation points)
# but the following does not work:

myplot(2) # .. would like to shift green-area-MIN-y-value to 2
# and red-area-MAX-y to 2
like image 496
r.user.05apr Avatar asked Aug 07 '17 10:08

r.user.05apr


1 Answers

geom_area is a special case of geom_ribbon that fixes ymin to zero. So the following works instead of your geom_area

geom_ribbon(aes(ymin=split.value, ymax=index, fill = valence), alpha = 0.5) +
like image 194
Andrew Lavers Avatar answered Oct 16 '22 11:10

Andrew Lavers