R语言基础图形绘制——箱线图



简介

箱线图主要是通过四分位数描述数据分布,通过最大值,上四分位数,中位数,下四分位数,最小值五处位置描述数据分布情况。箱线图能够显示出可能为离群点(范围±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
}

在这里插入图片描述


##侵权请联系作者删除!
最后,欢迎关注我的微信公众号。
在这里插入图片描述

  • 42
    点赞
  • 387
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
R语言中,可以使用ggplot2包来绘制多个箱线图。首先,需要载入相应的包和数据。通过使用ggplot函数创建绘图对象,并指定数据集和x、y轴变量。然后,可以使用geom_boxplot函数绘制箱线图,并通过fill参数指定组别的填充颜色。下面是一个示例代码: ```R # 载入相关包和数据 library(ggplot2) library(ggpubr) # 创建绘图对象 p <- ggplot(df, aes(x = group, y = value)) # 绘制箱线图 p + geom_boxplot(fill = "lightblue") # fill参数可以指定填充颜色 ``` 这样,就可以绘制出多个箱线图,每个箱线图代表一个组别。其中,group变量表示组别,value变量表示数据值。可以根据具体需要,调整绘图的其他参数和样式,如调整箱线图的宽度等。 请注意,代码中的df是一个示例数据集,你可以根据自己的需要替换成你自己的数据集。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于OpenGL的计算机图形学实验NURBS曲线算法](https://download.csdn.net/download/weixin_53249260/88236784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注](https://blog.csdn.net/ZaoJewin/article/details/131550937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值