Shade region between two lines with ggplot
How about using geom_ribbon
instead
ggplot(x, aes(x=x, y=twox)) + geom_line(aes(y = twox)) + geom_line(aes(y = x2)) + geom_ribbon(data=subset(x, 2 <= x & x <= 3), aes(ymin=twox,ymax=x2), fill="blue", alpha=0.5) + scale_y_continuous(expand = c(0, 0), limits=c(0,20)) + scale_x_continuous(expand = c(0, 0), limits=c(0,5)) + scale_fill_manual(values=c(clear,blue))
I think that geom_ribbon is the way to go. There are 2 steps to go:
- Data Manipulation: You should manipulate data to define ymin & ymax for arguments in geom_ribbon
- Draw plot with geom_ribbon.
Let's see my example:
#Data library(gcookbook) # Data Manipulationcb <-subset(climate,Source=="Berkeley")cb$valence[cb$Anomaly10y >= 0.3] <- "pos"cb$valence[cb$Anomaly10y < 0.3] <- "neg"cb$min <- ifelse(cb$Anomaly10y >= 0.3, 0.3, cb$Anomaly10y)cb$max <- ifelse(cb$Anomaly10y >= 0.3, cb$Anomaly10y, 0.3)#Drawing plotggplot(cb,aes(x=Year,y=Anomaly10y)) +geom_ribbon(aes(ymin = min, ymax = max, fill = valence), alpha = 0.75) +scale_fill_manual(values = c("blue", "orange")) +geom_line(aes(col = valence), size = 1) +scale_color_manual(values = c("blue", "orange")) +geom_hline(yintercept=0.3, col = "blue") +theme_bw()