R语言绘制箱线图(Box plot)
时间:2024-03-26 10:26:23 来源:网络cs 作者:胡椒 栏目:其他工具 阅读:
今天要给大家分享的是如何用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来表示。
第二步:箱线图绘制
Ⅰ. 简单箱线图绘制
## 绘制简单Boxplotboxplot(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<-ToothGrowthboxplot(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
今天的分享到此结束。(欢迎我的另一个草稿箱——公众号:统计小菜椒)
本文链接:https://www.kjpai.cn/news/2024-03-26/148784.html,文章来源:网络cs,作者:胡椒,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
下一篇:返回列表