R语言基础图形绘制——箱线图
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语言基础图形绘制——箱线图相关推荐
- 用R中ggplot2包做箱线图、折线图、条形图
用R中ggplot2包做箱线图.折线图.条形图(横.纵) 使用ggplot2完成画图工作 建议 箱线图 折线图 条形图 (纵)背景白色+柱子颜色一致 (纵)条形按y值降序排列+去掉边框线+红色渐变 ( ...
- R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)
R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts) 目录 R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)
- R语言ggplot2可视化绘制Marimekko/Mosaic图实战:自定义函数绘制Marimekko/Mosaic图(添加数值、标题、色彩配置)、ggmosaic包绘制Marimekko图
R语言ggplot2可视化绘制Marimekko/Mosaic图实战:自定义函数绘制Marimekko/Mosaic图(添加数值.标题.色彩配置).ggmosaic包绘制Marimekko图 目录
- R语言ggplot2可视化在lines线图的尾端添加线图标签、并且去除图例实战
R语言ggplot2可视化在lines线图的尾端添加线图标签实战 目录 R语言ggplot2可视化在lines线图的尾端添加线图标签实战 #仿真数据
- R语言echarts4r包:绘制优雅动态图
文章目录 安装 使用 特性 快速开始 突然看到期待已久的echarts4r包0.3.2版上线cran了,值得写点内容,顺便温习下用法. echarts4是百度开源项目,是一款简单实用.图表优美的js动 ...
- 小提琴统计图_R语言数据可视化系列(4)箱线图和小提琴图(附详细代码)
本文希望教会大家运用R语言绘制箱线图和小提琴图.小提琴图能同时查看数据的分布和描述性统计,是一种非常实用的可视化图形. 箱线图/盒须图 绘制连续型变量常用的五个描述性统计量,从下到上依次是:最小值,下 ...
- matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制
使用Matplotlib和Seaborn进行绘制箱线图和热力图. 箱线图 箱线图(boxplot)又称盒式图,可以显示数据的分散情况,由五个数值点组成:最大值(max)-上界.最小值(min)-下界. ...
- matlab输出箱线图的五个特征值_Matlab绘制箱线图
箱线图,又称作箱须图(box-whisker plot)是利用数据中的五个特征值--最小值.第一四分位点.中值.第三四分位点.最大值来描述数据的图形.箱线图可以粗略的估计数据是否具有对称性,粗略观察数 ...
- jmp怎么做合并的箱线图_如何在JMP中给箱线图(Box Plot)快速着色
箱线图(Box-plot),是大家耳熟能详的一种显示数据分散情况的统计图.通过箱线图,我们可以很容易地比较几组数据的形状,识别数据中的异常值,锁定那些需要我们关注的异常值信息,发现解决问题的机会. 箱 ...
最新文章
- HDU1261(高精度乘法+高精度除法)
- 3.Spring Security 自定义用户认证
- asp.net常用函数 选择自 UAM_Richard 的 Blog
- 04-老马jQuery教程-DOM节点操作及位置和大小
- 前端感官性能的衡量和优化实践
- 编程技术越来越被看中 编程到底是什么?
- 腾讯宣布捐赠1亿元驰援河南;苹果回应iPhone 安全隐患;贝索斯完成10分钟太空之旅|极客头条...
- ubuntu13.04中把ibus中的中文拼音输入设为默认
- Java导出Excel 复杂表头
- apt-get install 的参数(add-apt-repository)
- 电路交换、报文交换与分组交换
- 共享单车智能锁方案的优劣势
- DAVINCI DM365-DM368开发攻略—U-boot-2010.12-rc2-psp03.01.01.39及UBL的移植 .
- Linux 只可以找到 lo 网卡,没有eth0 or eth1网卡的解决方法
- 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...
- UE5导入MetaHuman
- c语言版数据结构期末考试试题及答案,数据结构c语言版期末考试复习试题[1]
- 持续集成工具 Jenkins vs TeamCity
- AI实现亲人“复活”|老照片修复|老照片上色,免费APP推荐
- FDTD学习之FDTD背景简介及mesh