Put ranges in separate data frame with species names and minimal/maximal values
ranges = data.frame(species=c('species_a','species_b'),
rmin=c(0.8,1.2),rmax=c(1.2,1.8))
ranges
species rmin rmax
1 species_a 0.8 1.8
2 species_b 1.2 1.8
Then use new data frame for geom_rect()
to make area that is placed under the geom_violin()
. The geom_blank()
is used to make x axis according to original data frame.
ggplot(df, aes(x=species, y=size)) + geom_blank() +
geom_rect(data=ranges,aes(xmin=as.numeric(species)-0.45,
xmax=as.numeric(species)+0.45,
ymin=rmin,ymax=rmax),inherit.aes=FALSE)+
geom_violin()