ggplot2箱式图两两⽐较_ggplot2-箱线图(Box-plot)
白芍简介
箱线图,顾明思义,是形状像箱⼦并展⽰⼀组或多组数据分布的统计图,被认为是⼀个优于柱形图的数据可视化⽅案,⽂章中指出了很多箱线图的优点。
在ggplot2 中做箱线图的图形变换是geom_boxplot(),⼩提琴图是geom_violin。
可识别的美学映射?(geom_boxplot):
x
lower
upper
middle
ymin
ymax
alpha
colour
fill
group
linetype
shape
size
weight
详情参见vignette("ggplot2-specs"),直接在R中运⾏即可阅读。
箱线图(包含其变体⼩提琴图、Bean-plot)可以更真实的反应数据的分布,并且可以更轻松地在三个或更多样本之间进⾏⽐较。它使⽤25%,第50%和75%以及四分位数范围(IQR = Q3-Q1)来表征样本,其结果覆盖了中⼼数据的50%。 ⽽且四分位数对异常值不敏感,并保留有关中⼼和差值的信息,加上
异常值(outliers)的体现,使箱形图的内容更丰富。如果加上散点则可以更好的体现样品数,点越多,结果的稳定性、可靠性越好;⽽⼩提琴图(Violin plot)还可以通过箱体的宽窄在箱形图的基础上展⽰出数据分布的概率密度。
1. 简单箱线图
library(ggplot2)
ggplot(data = ToothGrowth) + geom_boxplot(aes(x = supp, y = len))
boxplot.png
细节说明
墨鱼骨头能炖汤吗
⾸先看箱体:下边线代表下四分位数(第⼀四分位数,Q1),表⽰整体数据中有25%的数据少于该值;上边线代表上四分位数(第三四分位数,Q3),表⽰整体数据中有75%的数据少于该值;
箱体中间的线代表中位数,是⼀组数从⼩到⼤排列,居于正中间的单个数或正中间两个数的均值;
箱体的长度代表第三四分位数和第⼀四分位数的差值,也称为四分位间距(interquartile range,IQR);三年级植物作文
箱体两端的衍⽣线最左延伸⾄Q1 - 1.5 x IQR(下极限),最右延伸⾄ Q3 + 1.5 x IQR(上极限);
超出上下极限线的点(或其他标记)表⽰潜在异常值(outliers)。
2. ⽔平箱线图
3. 分组
简单分组(fill, color)
在aes()⾥⾯添加fill 或者 color 参数。
ggplot(data = ToothGrowth) + geom_boxplot(aes(x = supp, y = len,
fill = factor(do)))
长春中医学院boxplot.png
3.箱线图与抖动图
加上散点则可以更好的体现样品数,点越多,结果的稳定性、可靠性越好。
uea大学ggplot(data = ToothGrowth) + geom_boxplot(aes(x = supp, y = len)) +
geom_jitter(aes(x = supp, y = len))
服务员的英语
boxplot.png
散点分组
当散点图也需要分组时,如果直接添加fill 和 color 就不够了,ggplot2 函数会分组混乱。ggplot(data = ToothGrowth) +
geom_boxplot(aes(x = supp, y = len, color = factor(do))) +
geom_jitter(aes(x = supp, y = len, color = factor(do)))
boxplot.png
解决办法
a. position_jitterdodge
ggplot(data = ToothGrowth) +
geom_boxplot(aes(x = supp, y = len, color = factor(do))) +
geom_jitter(aes(x = supp, y = len, color = factor(do)),
position = position_jitterdodge())
boxplot.png
b. 产⽣⼀个新的分组变量,使其同时包含两个分组信息。
都匀西山公园# 在数据集中创建⼀个新的变量supp_do
# 其值是将supp 和 do粘贴到⼀起,这样新的⼀列数据就包含了两种分组信息。ToothGrowth$supp_do
# 然后以新的分组信息为x轴,代码不变。
漂亮符号ggplot(data = ToothGrowth) +
geom_boxplot(aes(x = supp_do, y = len, color = factor(do))) +
geom_jitter(aes(x = supp_do, y = len, color = factor(do)))
boxplot.png
c. 移动所有点的坐标。
分组变量可以通过as.numeric()转化为连续数字变量:1,2,3,4,5,这样就⽣成了箱线图在x轴上的坐标。
as.numeric(factor(ToothGrowth$supp))
在此基础上,按照另⼀个分组变量获得⼀个索引。然后对每⼀组进⾏增加或者减少值,⽣成散点的x轴坐标。
as.numeric(factor(ToothGrowth$do))
ToothGrowth$xpos
箱形图x坐标不变,散点图x坐标平移。
ggplot(data = ToothGrowth) +
geom_boxplot(aes(x = supp, y = len, color = factor(do))) +
geom_jitter(aes(x = xpos, y = len, color = factor(do)))
boxplot.png
4.⼩提琴图(Violin plot)
image.png
5. raincloud = violin plot + boxplot + raw data
云⾬图开始是⼀个咨询问答产物,连接直达源代码;yyplot⾥⾯有封装好的包。但是,有时候下载这个包可能会遇到安装不上的情况,所以没法下载的可以去问答界⾯拿源码⾃⼰打包⼀下。
image.png