今天要给大家分享的是如何用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文章来源:https://www.toymoban.com/news/detail-770789.html
今天的分享到此结束。(欢迎我的另一个草稿箱——公众号:统计小菜椒)文章来源地址https://www.toymoban.com/news/detail-770789.html
到了这里,关于R语言绘制箱线图(Box plot)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!