Fill specific regions in geom_violin plot

Viewed 890

How can I fill a geom_violin plot in ggplot2 with different colors based on a fixed cutoff?

For instance, given the setup:

library(ggplot2)

set.seed(123)
dat <- data.frame(x = rep(1:3,each = 100),
                  y = c(rnorm(100,-1),rnorm(100,0),rnorm(100,1)))
dat$f <- with(dat,ifelse(y >= 0,'Above','Below'))

I'd like to take this basic plot:

ggplot() + 
    geom_violin(data = dat,aes(x = factor(x),y = y))

and simply have each violin colored differently above and below zero. The naive thing to try, mapping the fill aesthetic, splits and dodges the violin plots:

ggplot() + 
    geom_violin(data = dat,aes(x = factor(x),y = y, fill = f))

which is not what I want. I'd like a single violin plot at each x value, but with the interior filled with different colors above and below zero.

1 Answers
Related