Czy to robi, co chcesz? Wymaga przetwarzania danych i rysowania dwóch skrzypiec.
set.seed(1)
dat <- data.frame(x=1, y=rnorm(10^5))
#calculate for each point if it's central or not
dat_q <- quantile(dat$y, probs=c(0.025,0.975))
dat$central <- dat$y>dat_q[1] & dat$y < dat_q[2]
#plot; one'95' violin and one 'all'-violin with transparent fill.
p1 <- ggplot(data=dat, aes(x=x,y=y)) +
geom_violin(data=dat[dat$central,], color="transparent",fill="gray90")+
geom_violin(color="black",fill="transparent")+
theme_classic()
Edit: zaokrąglone krawędzie mi nie przeszkadzało, więc o to drugie podejście. Gdybym to robił, chciałbym mieć proste linie. Więc zrobiłem trochę bawi się z gęstością (czego Działki są oparte na skrzypce)
d_y <- density(dat$y)
right_side <- data.frame(x=d_y$y, y=d_y$x) #note flip of x and y, prevents coord_flip later
right_side$central <- right_side$y > dat_q[1]&right_side$y < dat_q[2]
#add the 'left side', this entails reversing the order of the data for
#path and polygon
#and making x negative
left_side <- right_side[nrow(right_side):1,]
left_side$x <- 0 - left_side$x
density_dat <- rbind(right_side,left_side)
p2 <- ggplot(density_dat, aes(x=x,y=y)) +
geom_polygon(data=density_dat[density_dat$central,],fill="red")+
geom_path()
p2
Ach, po prostu mnie pokonać! – Axeman
@Axeman Wielki umysł myśli podobnie? Dodałem drugie podejście. – Heroka
@Heroka, to jest świetne! Jak się domyślacie, natknąłem się na twoje pierwsze podejście, ale nie byłem usatysfakcjonowany. Twoje drugie podejście jest dokładnie tym, czego chciałem. Wielkie dzięki! – dewarrn1