[R] creating a color gradient in geom_ribbon

Jim Lemon drjimlemon at gmail.com
Thu May 11 07:22:41 CEST 2017


Hi Kristi,
It can be done, but it is messy:

pl = data.frame(Time = 0:10, menle = rnorm(11))
pl$menlelb = pl$menle -1
pl$menleub = pl$menle +1
rg<-0.95
blue<-1
plot(pl$Time,pl$menlelb,ylim=range(c(pl$menlelb,pl$menleub)),type="l",
 lwd=7,col=rgb(rg,rg,blue))
lines(pl$Time,pl$menlelb,lwd=7,col=rgb(rg,rg,blue))
rg<-seq(0.9,0.3,length.out=9)
offset<-seq(0.88,0.08,by=-0.1)
for(i in 1:9) {
 lines(pl$Time,pl$menle+offset[i],lwd=7,col=rgb(rg[i],rg[i],blue))
 lines(pl$Time,pl$menle-offset[i],lwd=7,col=rgb(rg[i],rg[i],blue))
}
lines(pl$Time,pl$menle,lwd=6,col=rgb(0,0,blue))

For the ggplot solution, this might work:

ggplot(pl, aes(Time)) +
  geom_line(aes(y=menle+1), colour=rgb(0.95,0.95,1), width=7) +
  geom_line(aes(y=menle-1), colour=rgb(0.95,0.95,1), width=7) +
  geom_line(aes(y=menle+0.88), colour=rgb(0.9,0.9,1), width=7) +
  geom_line(aes(y=menle-0.88), colour=rgb(0.9,0.9,1), width=7) +
  geom_line(aes(y=menle+0.78), colour=rgb(0.825,0.825,1), width=7) +
  geom_line(aes(y=menle-0.78), colour=rgb(0.825,0.825,1), width=7) +
  geom_line(aes(y=menle+68), colour=rgb(0.75,0.75,1), width=7) +
  geom_line(aes(y=menle-68), colour=rgb(0.75,0.75,1), width=7) +
  geom_line(aes(y=menle+0.58), colour=rgb(0.675,0.675,1), width=7) +
  geom_line(aes(y=menle-0.58), colour=rgb(0.675,0.675,1), width=7) +
  geom_line(aes(y=menle+0.48), colour=rgb(0.6,0.6,1), width=7) +
  geom_line(aes(y=menle-0.48), colour=rgb(0.6,0.6,1), width=7) +
  geom_line(aes(y=menle+0.38), colour=rgb(0.525,0.525,1), width=7) +
  geom_line(aes(y=menle-0.38), colour=rgb(0.525,0.525,1), width=7) +
  geom_line(aes(y=menle+0.28), colour=rgb(0.45,0.45,1), width=7) +
  geom_line(aes(y=menle-0.28), colour=rgb(0.45,0.45,1), width=7) +
  geom_line(aes(y=menle+0.18), colour=rgb(0.375,0.375,1), width=7) +
  geom_line(aes(y=menle-0.18), colour=rgb(0.375,0.375,1), width=7) +
  geom_line(aes(y=menle+0.08), colour=rgb(0.3,0.3,1), width=7) +
  geom_line(aes(y=menle-0.08), colour=rgb(0.3,0.3,1), width=7) +
  geom_line(aes(y=menle), colour="blue") )

but I can't test it.

Jim

On Thu, May 11, 2017 at 6:05 AM, Kristi Glover
<kristi.glover at hotmail.com> wrote:
> Hi R Users,
>
> I was trying to create a figure with geom_ribbon. There is a function "fill", but I want to make the shaded area with a gradient (increasing dark color towards a central line, inserted of having a color). Is there any possibility?
>
>
> In the given example, I want the colour with "blue" but in a gradient (dark=central, light= as goes higher or lower)
>
>
> pl = data.frame(Time = 0:10, menle = rnorm(11))
>
> pl$menlelb = pl$menle -1
>
> pl$menleub = pl$menle +1
>
> ggplot(pl, aes(Time)) +
>
>   geom_line(aes(y=menle), colour="blue") +
>
>   geom_ribbon(aes(ymin=menlelb, ymax=menleub), fill="blue")
>
>
> Thanks
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list