Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Overlaying of violin plots in ggplot2 with transparent bodies

Tags:

r

ggplot2

Here is the code I am working with:

library(ggplot2)
coco1<-rnorm(10000,0,1)
coco2<-rnorm(10000,10,5)
coco3<-rnorm(10000,20,10)
coco4<-rnorm(10000,30,20)
decile<-rbinom(10000,3,1/2)+1
coconut<-data.frame(coco1,coco2,coco3,coco4,decile)

p <- ggplot(coconut, aes(factor(decile), coco1))
p <- p + geom_violin(aes(colour = "1"), alpha = .5, size=2)
q <- p + geom_violin(aes(y = coco2, colour = "2"), alpha = .5, size=2)
q <- q + geom_violin(aes(y = coco3, colour = "3"), alpha = .5, size=2)
q <- q + geom_violin(aes(y = coco4, colour = "4"), alpha = .5, size=2)

q

which generates this image:

enter image description here

Notice how the bodies of the violins create a transparency problem the further down the layers of violins you go? Ideally, I'd like the bodies to have alpha=0 and the outline of the body to have alpha=1.

like image 958
evoclue Avatar asked Feb 26 '16 21:02

evoclue


1 Answers

p <- ggplot(coconut, aes(factor(decile), coco1)) + 
  geom_violin(aes(colour = "1"), fill = NA, size=2) + 
  geom_violin(aes(y = coco2, colour = "2"), fill = NA, size=2) +
  geom_violin(aes(y = coco3, colour = "3"), fill = NA, size=2) +
  geom_violin(aes(y = coco4, colour = "4"), fill = NA, size=2)

p

resulting plot

like image 139
Roland Avatar answered Dec 13 '22 03:12

Roland