R语言绘制箱线图(Box plot)

今天要给大家分享的是如何用R语言绘制箱线图(Box plot)。

箱线图(Box plot)是在科研中出现频率非常高的一类图,它主要由5个部分组成:极小值、下四分位数、中位数、上四分位数、极大值。箱线图能够很好的展示数据的分布特征,可以通过箱线图判断一组数据是否呈对称分布,还能展示数据是否存在离群值等。

本次所使用的本次绘图所使用r包为R中内置boxplot包,无需重复安装加载。

一、简单箱线图绘制

第一步:导入数据

数据为R中自带数据集“Insect Sprays”,InsectSprays数据集为不同杀虫剂处理的农业试验单位中的昆虫计数。

data<-InsectSprays

数据展示:

该数据集一共包含72条数据,其中count表示不同农田中的昆虫数量;spray表示不同的农田,一共是6个农田,分别用A、B、C、D、E、F来表示。

第二步:箱线图绘制

Ⅰ. 简单箱线图绘制

## 绘制简单Boxplot
boxplot(count ~ spray, #代表以count为x轴,以spray为y轴
        data = data,  #指定数据集为data
        col = "pink") #定制箱线图的颜色为粉色

图片展示:

图片解释:

以上图为例,箱线图的中黑色加粗的线即为中位数;箱体(粉红色部分)上边缘代表上四分位数,箱体下边缘代表下四分位数;最上面的一根线代表极大值,最下面的一根线代表极小值。图中的那两个圈圈就代表离群值。

如何通过箱线图判断判断数据是否服从对称分布呢?以上图为例:

A. 试验田A以及F昆虫计数的中位数相对于整个箱体来说是偏下的,中位数比较靠近下四分位数,也就是说数据的大部分在箱体的下端,那么它就是右偏分布

B. 同理,如果中位数恰好在箱体正中间,那么说明数据服从对称分布

C. 试验田B昆虫计数的中位数相对于整个箱体来说是偏上的,中位数比较靠近上四分位数,也就是说数据的大部分在箱体的上端,那么它就是左偏分布

(记住是左偏还是右偏的小窍门:曲线往哪边儿拖尾就是哪种偏态)

图片

 Ⅱ. 修改箱线图细节

#定制箱线图——修改箱线图细节
boxplot(count ~ spray, #代表以count为x轴,以spray为y轴
        data=data,
        border=TRUE, #是否添加箱线图的边界线,默认为TRUE
        col="skyblue", #修改箱线图整体的颜色
        xlab="The type of spray", #添加X轴标签
        ylab="Number of insects", #添加y轴标签
        ylim=c(0,30), #修改Y轴刻度值
        medcol="red", #修改箱线图中间的线(中位数)的颜色
        medlwd=4, #修改箱线图中间的线(中位数)的粗细,数值越大线越粗
        medlty=1 #修改箱线图中间的线(中位数)的类型,1代表实线,2代表虚线
)

图片展示:

#题外话:给箱线图改个外观(科研中不太会用到,娱乐一下)
boxplot(count ~ spray, 
        data = data,
        notch = TRUE, 
        add = TRUE, 
        col = "skyblue")

 图片展示:

#对y轴取对数
boxplot(decrease ~ treatment, 
        data = OrchardSprays, 
        col = "bisque",
        log = "y" #表示取y轴的对数
        )

 图片展示:

## horizontal=TRUE,水平转置x轴与y轴
boxplot(decrease ~ treatment, 
        data = OrchardSprays, 
        col = "bisque",
        log = "x", #表示取x轴的对数
        horizontal=TRUE #水平转置x轴与y轴
        )

 图片展示:

Ⅲ. 多组箱线图绘制

这一部分所使用的数据集依然是R中自带数据集“ToothGrowth”。该数据集记录了60只豚鼠在服用不同维生素C及不同剂量后牙齿生长的长度。其中len表示豚鼠牙齿长度;supp表示不同的维生素C类型,共有橙汁或抗坏血酸两种类型(分别记为OJ和VC);dose表示豚鼠接受的维生素C的剂量(milligrams/day)。每只动物通过橙汁或抗坏血酸两种递送方式中的一种,接受三种剂量水平(0.5、1和2毫克/天)中的一种。

数据展示:

 ①箱线图绘制

data<-ToothGrowth
boxplot(len ~ dose, data = data,
        boxwex = 0.25, #定制箱线图箱体的宽度
        at = 1:3 - 0.1, #一共是三种不同的剂量,因此at=1:3,-0.1指定箱线图偏移(左偏)的位置(可以省略不要,那么箱线图图片整体位置居中)
        subset = supp == "VC", #这里通过指定supp类型为VC/OJ 
        col = "yellow", #定制箱线图颜色
        main = "Tooth Length", #添加箱线图标题/抬头
        xlab = "Vitamin C dose mg", #添加x轴标签
        ylab = "tooth length", #添加y轴标签
        xlim = c(0.5, 3.5), #设置x轴范围
        ylim = c(0, 35), #设置y轴范围
        yaxs = "i" #在R中默认会画出增加4%的坐标轴,如果想画出正好是xlim或ylim的长度,可以使用 xaxs/yaxs="i"
        )

图片展示:

 

②多组箱线图绘制:

boxplot(len ~ dose, data = data, 
        add = TRUE, #TRUE在上个图形的基础上叠加下一个图形,将两组箱线图放在一起的关键
        boxwex = 0.25, at = 1:3 + 0.2, #设置箱线图位置,+0.2也就是向偏移0.2个单位
        subset = supp == "OJ", 
        col = "orange")
#添加图例
legend(2, 9, c("Ascorbic acid", "Orange juice"),
       fill = c("yellow", "orange"))




#也可以参考以下代码,一步到位直接绘制两组箱线图
boxplot(len ~ dose:supp, #因子*交互项,即给箱线图添加一个分组标准supp
        data = data,
        boxwex = 0.5, col = c("orange", "yellow"),
        main = "Tooth Growth",
        xlab = "dose mg", 
        ylab = "tooth length",
        sep = " ", #设置分隔符
        lex.order = TRUE, #TRUE表示按顺序排列x轴(按does大小排列箱线图)
        ylim = c(0, 35), yaxs = "i")

 图片展示:

Reference:boxplot function - RDocumentation

 今天的分享到此结束。(欢迎我的另一个草稿箱——公众号:统计小菜椒)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值