I want to set background colors in my ggplot to highlight ranges of data. Particularly, I want to highlight [-0.1,0.1]
with, say, green,[-0.25,-0.1)
and (0.1,0.25]
with orange. In other words, what I need are bars with some alpha-transparency whose y-limits are the plot's y range, and x-limits are set by me.
Ideally, I would want something that would not be sensitive to coord_cartesian(...)
(as setting vline(...,size = X)
would). Additionally, it would be nice to have something independent from any data, and based solely on plot coordinates. I tried geom_segment
, but I could not figure it our how to set a width that would work.
library(ggplot2)
x <- c(seq(-1, 1, by = .001))
y <- rnorm(length(x))
df <- as.data.frame(x=x,y=y)
ggplot(df,aes(x,y)) +
geom_point(aes(y*abs(x)),alpha=.2,size=5) +
theme_bw() +
coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1))
You can add the "bars" with geom_rect()
and setting ymin
and ymax
values to -Inf
and Inf
. But according to @sc_evens answer to this question you have to move data
and aes()
to geom_point()
and leave ggplot()
empty to ensure that alpha=
of geom_rect()
works as expected.
ggplot()+
geom_point(data=df,aes(x=y*abs(x),y=y),alpha=.2,size=5) +
geom_rect(aes(xmin=-0.1,xmax=0.1,ymin=-Inf,ymax=Inf),alpha=0.1,fill="green")+
geom_rect(aes(xmin=-0.25,xmax=-0.1,ymin=-Inf,ymax=Inf),alpha=0.1,fill="orange")+
geom_rect(aes(xmin=0.1,xmax=0.25,ymin=-Inf,ymax=Inf),alpha=0.2,fill="orange")+
theme_bw() +
coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1))
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With