R语言绘制箱线图

  • 简介
  • 1. 基础函数—`boxplot()`
  • 2. `ggplot()`函数

简介

箱线图主要是通过四分位数描述数据分布,通过最大值,上四分位数,中位数,下四分位数,最小值五处位置描述数据分布情况。箱线图能够显示出可能为离群点(范围±1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。
从箱线图中,可以大致推断出数据的集中或离散趋势。

下图清楚展示了箱线图的组成部分。

1. 基础函数—boxplot()

boxplot() 是一个泛型函数,目前支持两种参数类型:公式和数据。
用法

## S3 method for class 'formula'
boxplot(formula, data = NULL, ..., subset, na.action = NULL,xlab = mklab(y_var = horizontal),ylab = mklab(y_var =!horizontal),add = FALSE, ann = !add, horizontal = FALSE,drop = FALSE, sep = ".", lex.order = FALSE)## Default S3 method:
boxplot(x, ..., range = 1.5, width = NULL, varwidth = FALSE,notch = FALSE, outline = TRUE, names, plot = TRUE,border = par("fg"), col = NULL, log = "",pars = list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5),ann = !add, horizontal = FALSE, add = FALSE, at = NULL)
  • x 参数为一个数值向量或者列表,若为列表则对列表中每一个子对象依次作出箱线图。
  • formula 为一个公式,比如 y ~ x。
  • data 参数为一个数据框或者列表。
  • na.action 参数是对NA值的操作,默认为忽略。
  • ann 参数为逻辑值,是否绘制坐标轴。
  • range 是一个延伸倍数,决定了箱线图的须延伸到什么位置。
  • width 设置箱子的宽度。
  • varwidth 为逻辑值,若为 TRUE,那么箱子的宽度与样本量的平方根成比例。
  • notch 决定了是否在箱子上画凹槽,可以用于比较两组数据的中位数是否有差异。
  • horizontal 是否水平放置箱线图。
  • add 参数设置是否将箱线图添加到现有图形上。
  • at 参数,当add为TRUE时,设置箱线图位置。

示例

数据形式传入参数

set.seed(1)
boxplot(rnorm(10),rnorm(10),names = c("rn1","rn2"),col = colors()[10:11])


这两个图不多赘述了,分别使用了varwidth 参数和notch 参数。

set.seed(2)
op <- par(no.readonly=TRUE)
par(bty = "l",mar = rep(3,4),mfrow = c(1,2))
boxplot(rnorm(10),rnorm(5), col = rgb(1,seq(0,1,length.out = 2),0),pch = 4,lwd = 1.5,varwidth = T)
boxplot(rnorm(20),rnorm(10), col = rgb(1,seq(0,1,length.out = 2),0),pch = 4,lwd = 1.5,varwidth = T,notch = T)
par(op)


一个常规箱线图,一个带凹槽?简单两句命令即可实现。

op <- par(no.readonly=TRUE)
par(bty = "l")
boxplot(rnorm(10),NULL, names = c("A","B"),col = "red",pch = 4,lwd = 1.5,at = c(1,2))
boxplot(rnorm(10),col = "blue",lwd = 1.5,notch = T,add = T,at = 2)
par(op)

这里使用datasets基础包中的InsectSprays数据集(不同杀虫剂处理的农业试验单位昆虫数量)演示。

# 简单查看数据集
head(InsectSprays)
#    count spray
# 1    10     A
# 2     7     A
# 3    20     A
# 4    14     A
# 5    14     A
# 6    12     A
dim(InsectSprays)
# [1] 72  2
summary(InsectSprays)
#   count       spray
# Min.   : 0.00   A:12
# 1st Qu.: 3.00   B:12
# Median : 7.00   C:12
# Mean   : 9.50   D:12
# 3rd Qu.:14.25   E:12
# Max.   :26.00   F:12

公式传入数据,经典坐标轴绘制箱线图,并将离群点样式更改为“4”。

op <- par(no.readonly=TRUE)
par(bty = "l",mar = rep(3,4))
boxplot(count ~ spray, data = InsectSprays,col = "lightgray", pch = 4)
par(op)


箱线图水平放置并上色。

op <- par(no.readonly=TRUE)
par(bty = "l",mar = rep(3,4))
boxplot(count ~ spray, data = InsectSprays,horizontal = T, col = rgb(1,seq(0,1,length.out = 6),0), pch = 4,lwd = 1.5)
par(op)


以众所周知的mtcars数据集作为分组箱线图示例。使用at参数区分两组数据。

library(magrittr)
library(tidyverse)
set.seed(3)
op <- par(no.readonly=TRUE)
par(mar = rep(3,4))
col <- sample(colors(),3)
mtcars %>% {boxplot(mpg ~ cyl + am,.,at = c(1:3,5:7),col = col)}
par(op)


基础函数绘制箱线图到此为止,基本上能满足大家的需求。不过不得不吐槽,基础函数还是不及ggplot。好了,接下来使用ggplot函数绘制箱线图。

2. ggplot()函数

直接上图吧,相关绘图函数大家通过实例去学习。

library(ggplot2)
library(patchwork)
library(RColorBrewer)
InsectSprays %>% {p <- ggplot(.,mapping = aes(spray,count))p1 <- p + geom_boxplot(outlier.shape = 21,outlier.colour = "red",outlier.fill = "blue",col = "black",fill = brewer.pal(6,"Set1"))p2 <- p + stat_boxplot(geom = "errorbar",width=0.3)+geom_boxplot(outlier.shape = 21,outlier.colour = "red",outlier.fill = "blue",col = "black",fill = brewer.pal(6,"Set1"))p1+p2
}


效果还不错吧。对比一下,实现你的不同绘图需求。

接下来,利用ggplot实现分组箱线图,并通过ggpubr包的相关函数为组内添加显著性标记。当然,也可以自定义分组。

library(ggplot2)
library(patchwork)
library(RColorBrewer)
library(ggsci)
library(ggpubr)
mtcars %>% {p <- ggplot(.,mapping = aes(as.factor(am),mpg,fill = as.factor(cyl)))p1 <- p + geom_boxplot()+stat_compare_means()+scale_fill_lancet()+theme_bw()+theme(legend.position = "none")p2 <- p + geom_boxplot(notch = T)+scale_fill_lancet()+theme_classic()p1 + p2
}


介绍了这么多,相信大家肯定有所收获噢。支持一下作者吧! 欢迎大家留言讨论。

更新于2020.12.25:
最近有小伙伴私信问如何将箱线变为虚线,在这里统一回答。我的实现如下:

library(ggplot2)
library(patchwork)
library(RColorBrewer)
library(tidyverse)
InsectSprays %>% {p <- ggplot(.,mapping = aes(spray,count))p1 <- p + stat_boxplot(geom = "errorbar",width=0.3)+geom_boxplot(outlier.shape = 21,outlier.colour = "red",outlier.fill = "blue",col = "black",fill = brewer.pal(6,"Set1"))p2 <- p + geom_boxplot(col = "black",linetype = 2) +stat_boxplot(aes(ymin=..lower..,ymax=..upper..),fill = brewer.pal(6,"Set1"),outlier.shape = 21,outlier.colour = "red",outlier.fill = "blue") +stat_boxplot(geom = "errorbar",aes(ymin=..ymax..),width=0.3,color="black")+stat_boxplot(geom = "errorbar",aes(ymax=..ymin..),width=0.3,color="black")p1+p2
}


##侵权请联系作者删除!
最后,欢迎关注我的微信公众号。

R语言基础图形绘制——箱线图相关推荐

  1. 用R中ggplot2包做箱线图、折线图、条形图

    用R中ggplot2包做箱线图.折线图.条形图(横.纵) 使用ggplot2完成画图工作 建议 箱线图 折线图 条形图 (纵)背景白色+柱子颜色一致 (纵)条形按y值降序排列+去掉边框线+红色渐变 ( ...

  2. R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)

    R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts) 目录 R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)

  3. R语言ggplot2可视化绘制Marimekko/Mosaic图实战:自定义函数绘制Marimekko/Mosaic图(添加数值、标题、色彩配置)、ggmosaic包绘制Marimekko图

    R语言ggplot2可视化绘制Marimekko/Mosaic图实战:自定义函数绘制Marimekko/Mosaic图(添加数值.标题.色彩配置).ggmosaic包绘制Marimekko图 目录

  4. R语言ggplot2可视化在lines线图的尾端添加线图标签、并且去除图例实战

    R语言ggplot2可视化在lines线图的尾端添加线图标签实战 目录 R语言ggplot2可视化在lines线图的尾端添加线图标签实战 #仿真数据

  5. R语言echarts4r包:绘制优雅动态图

    文章目录 安装 使用 特性 快速开始 突然看到期待已久的echarts4r包0.3.2版上线cran了,值得写点内容,顺便温习下用法. echarts4是百度开源项目,是一款简单实用.图表优美的js动 ...

  6. 小提琴统计图_R语言数据可视化系列(4)箱线图和小提琴图(附详细代码)

    本文希望教会大家运用R语言绘制箱线图和小提琴图.小提琴图能同时查看数据的分布和描述性统计,是一种非常实用的可视化图形. 箱线图/盒须图 绘制连续型变量常用的五个描述性统计量,从下到上依次是:最小值,下 ...

  7. matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制

    使用Matplotlib和Seaborn进行绘制箱线图和热力图. 箱线图 箱线图(boxplot)又称盒式图,可以显示数据的分散情况,由五个数值点组成:最大值(max)-上界.最小值(min)-下界. ...

  8. matlab输出箱线图的五个特征值_Matlab绘制箱线图

    箱线图,又称作箱须图(box-whisker plot)是利用数据中的五个特征值--最小值.第一四分位点.中值.第三四分位点.最大值来描述数据的图形.箱线图可以粗略的估计数据是否具有对称性,粗略观察数 ...

  9. jmp怎么做合并的箱线图_如何在JMP中给箱线图(Box Plot)快速着色

    箱线图(Box-plot),是大家耳熟能详的一种显示数据分散情况的统计图.通过箱线图,我们可以很容易地比较几组数据的形状,识别数据中的异常值,锁定那些需要我们关注的异常值信息,发现解决问题的机会. 箱 ...

最新文章

  1. HDU1261(高精度乘法+高精度除法)
  2. 3.Spring Security 自定义用户认证
  3. asp.net常用函数 选择自 UAM_Richard 的 Blog
  4. 04-老马jQuery教程-DOM节点操作及位置和大小
  5. 前端感官性能的衡量和优化实践
  6. 编程技术越来越被看中 编程到底是什么?
  7. 腾讯宣布捐赠1亿元驰援河南;苹果回应iPhone 安全隐患;贝索斯完成10分钟太空之旅|极客头条...
  8. ubuntu13.04中把ibus中的中文拼音输入设为默认
  9. Java导出Excel 复杂表头
  10. apt-get install 的参数(add-apt-repository)
  11. 电路交换、报文交换与分组交换
  12. 共享单车智能锁方案的优劣势
  13. DAVINCI DM365-DM368开发攻略—U-boot-2010.12-rc2-psp03.01.01.39及UBL的移植 .
  14. Linux 只可以找到 lo 网卡,没有eth0 or eth1网卡的解决方法
  15. 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...
  16. UE5导入MetaHuman
  17. c语言版数据结构期末考试试题及答案,数据结构c语言版期末考试复习试题[1]
  18. 持续集成工具 Jenkins vs TeamCity
  19. AI实现亲人“复活”|老照片修复|老照片上色,免费APP推荐
  20. FDTD学习之FDTD背景简介及mesh

热门文章

  1. 区块链与ICO,了解一下
  2. Java日期:今天,昨天,某一天,某一天的前一天
  3. 《微信公众平台应用开发实战(第2版)》一1.1 微信公众账号的注册
  4. android手机接投影仪,手机投屏到投影仪的几种方法
  5. 使用python完成知乎模拟登陆
  6. 七分设计感的纯Flutter项目(Mung三部曲)
  7. 如何拆分PDF文件或提取PDF页面为一个单独文件?
  8. 计算机网络三大要素是,计算机网络安全的三大要素不包括?
  9. 暗黑 pvpgn mysql 架设_暗黑破坏神2战网架设图文教程
  10. 审阅模式中word保存不了