The suggested solution works in many cases, but there's a potential pitfall to watch out for if your data is large, i.e. more than a few thousand rows. In those cases, the drawing could get very slow, and `alpha`

will not work as expected. But most of the time those are not significant problems.

The issue is that using `geom_rect`

and `geom_segment`

will draw one layer for every row of data, so the output of the solution has 150 rectangles, and 150 segments, drawn on top of each other. You'll note that adding `alpha = 0.1`

to any of these layers will look exactly the same as without it.

If this is a problem for your situation, the easiest solution would be to use `annotate`

instead. Compare the output of these two:

```
# Iris has 150 rows, so each layer gets drawn once per row
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
geom_rect(xmin = 5, xmax = 7, ymin = 2.5, ymax = 4, fill = NA, color = "red", alpha = 0.1) +
geom_segment(x = 5, y = 2, xend = 7, yend = 4, color = "blue", alpha = 0.1) +
geom_segment(x = 6, y = 2, xend = 7, yend = 3, color = "green", alpha = 0.1)
# annotate just draws one layer; geom_rect's alpha controls fill, so it doesn't look translucent here
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
annotate("rect", xmin = 5, xmax = 7, ymin = 2.5, ymax = 4, fill = NA, color = "red", alpha = 0.1) +
annotate("segment", x = 5, y = 2, xend = 7, yend = 4, color = "blue", alpha = 0.1) +
annotate("segment", x = 6, y = 2, xend = 7, yend = 3, color = "green", alpha = 0.1)
```