matlab半小提琴图,【ggplot2】不同方法画half -小提琴图

参考:

效果图:

每一个分组画出一半小提琴图, 放一起。

列举了三种方法:

geom_ploygon : 画出密度多边形 (难度:**)

gghalves 画出half 效果(难度:*)

geom图层语法 (难度:***)

9de43dbacd4d

image.png

实践

模拟数据

set.seed(20160229)

my_data = data.frame(

y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5)),

x=c(rep('a', 2000), rep('b', 2000)),

m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000))

)

方法1 geom_ploygon

library(dplyr)

pdat %

group_by(x, m) %>% summarise(loc=density(.$y)$x,

dens=density(.$y)$y)

pdat$dens

pdat$dens

ggplot(pdat, aes(dens, loc, fill = m, group = interaction(m, x))) +

geom_polygon() +

scale_x_continuous(breaks = 0:1, labels = c('a', 'b')) +

ylab('density') +

theme_minimal() +

theme(axis.title.x = element_blank())

方法2 gghalves

library(gghalves)

ggplot(iris, aes(x = Species, y = Sepal.Width)) +

geom_half_point()+

geom_point()

head(my_data)

ggplot()+

geom_half_violin(data=my_data %>% filter(x=="a" & m=="i"),

aes(x=x,y=y,fill=m) ,side = "l")+

geom_half_violin(data=my_data %>% filter(x=="a" & m=="j"),

aes(x=x,y=y,fill=m) ,side = "r")+

geom_half_violin(data=my_data %>% filter(x=="b" & m=="i"),

aes(x=x,y=y,fill=m) ,side = "l")+

geom_half_violin(data=my_data %>% filter(x=="b" & m=="j"),

aes(x=x,y=y,fill=m) ,side = "r")+

theme_classic()

方法3 geom

GeomSplitViolin

draw_group = function(self, data, ..., draw_quantiles = NULL) {

data

grp

newdata

newdata

newdata[c(1, nrow(newdata) - 1, nrow(newdata)), "x"]

if (length(draw_quantiles) > 0 & !scales::zero_range(range(data$y))) {

stopifnot(all(draw_quantiles >= 0), all(draw_quantiles <=

1))

quantiles

aesthetics

aesthetics$alpha

both

quantile_grob

ggplot2:::ggname("geom_split_violin", grid::grobTree(GeomPolygon$draw_panel(newdata, ...), quantile_grob))

}

else {

ggplot2:::ggname("geom_split_violin", GeomPolygon$draw_panel(newdata, ...))

}

})

geom_split_violin

draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE,

show.legend = NA, inherit.aes = TRUE) {

layer(data = data, mapping = mapping, stat = stat, geom = GeomSplitViolin,

position = position, show.legend = show.legend, inherit.aes = inherit.aes,

params = list(trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ...))

}

ggplot(my_data, aes(x, y, fill = m)) + geom_split_violin()

Tips

gl函数:因子生成函数

interaction 函数:因子组合函数,有点类似expand.grid 函数功能。

# a

# b

# s

# interaction(a, b) 因子组合函数

欢迎评论留言~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值