参见:https://mp.weixin.qq.com/s/NGkVxHBM3DmFN17ckzdhZg
听说你喜欢用柱状图?
或者加个标准差或者标准误?
stat_df <- Rmisc::summarySE(iris, measurevar = "Petal.Length", groupvars = "Species")
ggplot(stat_df, aes(Species, Petal.Length, fill=Species)) +
geom_bar(stat = "identity") +
geom_errorbar(aes(ymin = Petal.Length - sd, ymax = Petal.Length + sd), width = 0.2)
但是,柱状图却会让原先的数据分布表现的并不明了,比如本先的数据分布,四分位数统计量,outlier 值等。
所以现在流行的不单单是画boxplot,有以下几种方式是显得比较专业的:
- boxplot + raw data
- violin plot + boxplot
- violin plot + raw data
- violin plot + boxplot + raw data
但由于这样的图画出来的是对称,信息比较冗余。
如果我们可以显示一半呢?
比如一半的小提琴图加上原始数据分布:
ggplot(iris, aes(Species, Petal.Length, fill=Species)) +
geom_half_violin(position=position_nudge(x=.2), side=2) +
geom_jitter(aes(color=Species), width=.15)
只需要简单调整一下原始点的抖动,就可以得到分开的结果了。
我们还可以组合误差棒、箱线图等,获得sd 或se 以及离群值的信息:
ggplot(iris, aes(Species, Petal.Length, fill=Species)) +
geom_half_violin(position=position_nudge(x=.3), side=2) +
geom_boxplot(width=.1, position=position_nudge(x=.22)) +
geom_errorbar(data = stat_df, aes(ymin = Petal.Length - sd, ymax = Petal.Length + sd), width = 0.2) +
geom_jitter(width=.15, aes(color = Species))
结果是上面这样的。
给隔壁的师兄看了看,它说有点不好看。
我眉头紧皱,于是又是一幅图:
ggplot(iris, aes(Species, Petal.Length, fill=Species)) +
geom_half_violin(position=position_nudge(x=.2), side=2) +
geom_boxplot(width=.1, position=position_nudge(x=.1)) +
geom_pointrange(data = stat_df, aes(ymin = Petal.Length - sd, ymax = Petal.Length + sd), size=1, position=position_nudge(x=.24)) +
geom_dotplot(binaxis="y", stackdir="down", dotsize=.35)
这样看就好多了呀~