自定义背景以突出显示ggplot中的数据范围

时间:2013-11-25 13:46:37

标签: r ggplot2

我想在ggplot中设置背景颜色以突出显示数据范围。特别是,我想用绿色,[-0.1,0.1][-0.25,-0.1)用橙色突出显示(0.1,0.25]。换句话说,我需要的是具有一些alpha透明度的条形图,其y-限制是图形的y范围,x-limits由我设置。

理想情况下,我想要一些对coord_cartesian(...)不敏感的东西(如设置vline(...,size = X)那样)。另外,拥有独立于任何数据的东西并且仅基于绘图坐标会很好。我试过geom_segment,但我无法想象我们如何设置一个可行的宽度。

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))

example

2 个答案:

答案 0 :(得分:12)

您可以添加&#34;栏&#34;使用geom_rect()并将yminymax值设置为-InfInf。但根据@sc_evens对this question的回答,您必须将dataaes()移至geom_point()并将ggplot()留空以确保alpha= geom_rect()按预期工作。

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))

enter image description here

答案 1 :(得分:11)

您可以尝试annotate,其中包含xminxmax值的向量。

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))

enter image description here