ggplot2小提琴情节:只填满中央95%? [英] ggplot2 violin plot: fill central 95% only?

查看:320
本文介绍了ggplot2小提琴情节:只填满中央95%?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

ggplot2可以创建一个非常有吸引力的填充小提琴剧情:

ggplot2 can create a very attractive filled violin plot:

ggplot() + geom_violin(data=data.frame(x=1, y=rnorm(10 ^ 5)), 
    aes(x=x, y=y), fill='gray90', color='black') + 
    theme_classic()

如果可能,我想限制填充到分布的中心95%,使轮廓保持完整。有没有人有如何做到这一点的建议?

I'd like to restrict the fill to the central 95% of the distribution if possible, leaving the outline intact. Does anyone have suggestions on how to accomplish this?

推荐答案

这是否做你想要的?它需要一些数据处理和绘制两把小提琴。

Does this do what you want? It requires some data-processing and the drawing of two violins.

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

编辑:圆形的边缘困扰着我,所以这是第二种方法。如果我这样做,我会想要直线。所以我做了一些玩密度(这是小提琴剧情的基础)

the rounded edges bothered me, so here is a second approach. If I were doing this, I would want straight lines. So I did some playing with the density (which is what violin plots are based on)

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

这篇关于ggplot2小提琴情节:只填满中央95%?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆