You may try annotate, which takes vectors of xmin and xmax values.
ggplot(df,aes(x,y)) +
geom_point(aes(y*abs(x)), alpha =.2, size = 5) +
annotate("rect", xmin = c(-0.1, -0.25, 0.1), xmax = c(0.1, -0.1, 0.25),
ymin = -1, ymax = 1,
alpha = 0.2, fill = c("green", "orange", "orange")) +
theme_bw() +
coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1))
