R中的boxplot():如何在RStudio中制作箱线图 [示例]

R中的boxplot()

R中的boxplot()通过四分位数可视化数据分布并检测异常值的存在。您可以使用ggplot2库中的几何对象geom_boxplot()在R中绘制boxplot()。

我们将使用airquality数据集来介绍ggplot在R中的boxplot()。该数据集衡量了1973年5月至9月纽约的空气质量。该数据集包含154个观测值。我们将使用以下变量

  • Ozone: 数值变量
  • Wind: 数值变量
  • Month: 5月至9月。数值变量

创建箱线图

在开始在R中创建第一个boxplot()之前,您需要按如下方式处理数据

  • 步骤1: 导入数据
  • 步骤2: 删除不必要的变量
  • 步骤3: 将月份转换为因子水平
  • 步骤4: 创建一个新的分类变量,将月份划分为三个级别:开始、中间和结束。
  • 步骤5: 移除缺失的观测值

所有这些步骤都使用dplyr和管道操作符%>%来完成。

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality % > %

#Step 2
select(-c(Solar.R, Temp)) % > %

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

一个好的做法是使用glimpse()函数检查数据结构。

glimpse(data_air)

输出

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

数据集中存在NA。删除它们是明智的。

# Step 5
data_air_nona <-data_air %>% na.omit()	

基本箱线图

让我们绘制基本的R boxplot(),展示臭氧按月份的分布。

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

代码解释

  • 为图形存储以备后用
    • box_plot: 您将图形存储在变量box_plot中,这对于后续使用或避免过于复杂的代码行很有帮助。
  • 添加R boxplot()的几何对象
    • 您将数据集data_air_nona传递给ggplot boxplot。
    • 在aes()参数内部,您添加x轴和y轴。
    • “+”号表示您希望R继续读取代码。它通过断开代码来提高代码的可读性。
    • 使用geom_boxplot()创建箱线图

输出

Basic Box Plot

更改图形的侧边

您可以翻转图形的侧边。

box_plot +
  geom_boxplot()+
  coord_flip()

代码解释

  • box_plot: 您使用存储的图形。这可以避免每次向图形添加新信息时都要重写所有代码。
  • geom_boxplot(): 在R中创建箱线图()
  • coord_flip(): 翻转图形的侧边

输出

Change Side of the Graph

更改异常值的颜色

您可以更改异常值的颜色、形状和大小。

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

代码解释

  • outlier.colour=”red”: 控制异常值的颜色
  • outlier.shape=2: 更改异常值的形状。2表示三角形
  • outlier.size=3: 更改三角形的大小。大小与数字成正比。

输出

Change Color of Outlier

添加汇总统计

您可以向R boxplot()添加汇总统计。

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

代码解释

  • stat_summary()允许向水平箱线图R添加汇总统计。
  • fun.y 参数控制返回的统计信息。您将使用均值
  • 注意: 其他统计信息可用,如最小值和最大值。同一图形中可以显示多个统计信息。
  • geom = “point”: 用点绘制平均值
  • size=3: 点的大小
  • color =”steelblue”: 点的颜色

输出

Add a Summary Statistic

带点的箱线图

在下一个水平箱线图R中,您将添加点图层。每个点代表一个观测值。

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

代码解释

  • geom_dotplot()允许按bin宽度添加点
  • binaxis=’y’: 更改点在y轴上的位置。默认情况下是x轴。
  • dotsize=1: 点的大小
  • stackdir=’center’: 堆叠点的方式: 四个值
    • “up” (默认),
    • “down”
    • “center”
    • “centerwhole”

输出

Box Plot with Dots

控制箱线图的美学属性

更改箱体的颜色

您可以更改组的颜色。

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

代码解释

  • 组的颜色在aes()映射中控制。您可以使用color= Month根据月份更改箱体和须线图的颜色。

输出

Change the Color of the Box

多组箱线图

也可以添加多个组。您可以根据测量日期可视化空气质量的差异。

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

代码解释

  • 几何对象的aes()映射控制要显示的组(此变量必须是因子)。
  • aes(fill= day_cat)允许为x轴上的每个月份创建三个箱体。

输出

Box Plot with Multiple Groups

带抖动点的箱线图

另一种显示点的方式是使用抖动点。这是在R变量中可视化分类数据的点与箱线图的便捷方法。

此方法避免了离散数据的重叠。

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

代码解释

  • geom_jitter()为每个点添加一点抖动。
  • shape=15更改点的形状。15代表正方形。
  • color = “steelblue”: 更改点的颜色
  • position=position_jitter(width = 0.21): 放置重叠点的方式。position_jitter(width = 0.21)意味着您将点沿x轴移动20%。默认是40%。

输出

Box Plot with Jittered Dots

您可以看到第一个带有抖动方法的图与第二个带有点方法的图之间的区别。

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box Plot with Jittered Dots

带缺口的箱线图

geom_boxplot()的一个有趣特性是R中的带缺口箱线图函数。缺口图缩窄了中位数周围的箱体。带缺口箱线图的主要目的是比较各组中位数之间的显著性。当缺口不重叠时,有强烈的证据表明两组中位数不同。缺口计算如下:

Notched Box Plot

与四分位间距和观测数量有关。

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

代码解释

  • geom_boxplot(notch=TRUE): 在R中创建带缺口的水平箱线图

输出

Notched Box Plot

摘要

我们可以在下表中总结不同类型的水平箱线图R。

目标 代码
基本箱线图
ggplot(df, aes( x = x1, y =y)) + geom_boxplot()
翻转侧边
ggplot(df, aes( x = x1, y =y)) + geom_boxplot() + coord_flip()
带缺口的箱线图
ggplot(df, aes( x = x1, y =y)) + geom_boxplot(notch=TRUE)
带抖动点的箱线图
ggplot(df, aes( x = x1, y =y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))

另请参阅:R初学者教程:学习R编程语言