R - 箱线图
R - 使用 ggplot2 绘制现代箱线图
Section titled “R - 使用 ggplot2 绘制现代箱线图”箱线图(或盒须图)是可视化连续变量分布的强大方式。它们简洁地显示关键统计量:最小值、第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和最大值。它们对于比较变量在不同类别之间的分布特别有用。
如今,ggplot2 是在 R 中创建灵活且出版质量的箱线图的标准。
箱线图显示:
- 中位数(median):盒内的线。
- 四分位距(IQR):盒子本身,从第 25 百分位数(Q1)延伸到第 75 百分位数(Q3)。
- 须线(whiskers):从盒子延伸的线,显示数据的范围。通常,它们延伸到距离盒边缘 1.5 倍 IQR 的位置。
- 异常值(outliers):落在须线范围之外的点。
我们将使用 mtcars 数据集来比较不同汽缸数(cyl)汽车的 mpg(每加仑英里数)分布。
设置与数据准备
Section titled “设置与数据准备”# 我们将使用 tidyverse 中的 ggplot2# install.packages("tidyverse")library(ggplot2)library(dplyr)
# 将分类变量视为因子是一个好习惯# 这能确保 ggplot2 正确处理它。input_data <- mtcars %>% mutate(cyl = factor(cyl))
print(head(input_data[, c('mpg', 'cyl')]))执行上述代码会产生以下结果:
mpg cylMazda RX4 21.0 6Mazda RX4 Wag 21.0 6Datsun 710 22.8 4Hornet 4 Drive 21.4 6Hornet Sportabout 18.7 8Valiant 18.1 6示例:按汽缸数划分的里程
Section titled “示例:按汽缸数划分的里程”我们通过指定 x 轴上的分类变量(cyl)和 y 轴上的连续变量(mpg),然后添加 geom_boxplot 层来构建图表。
# 创建箱线图boxplot_cyl <- ggplot(data = input_data, aes(x = cyl, y = mpg)) + geom_boxplot() + labs( title = "Distribution of Fuel Efficiency by Number of Cylinders", x = "Number of Cylinders", y = "Miles Per Gallon (MPG)" ) + theme_classic()
# 显示图表print(boxplot_cyl)
# 将图表保存到文件ggsave("boxplot.png", width = 7, height = 5)此代码生成一个清晰的箱线图 boxplot.png,显示随着汽缸数的增加,每加仑英里数的中位数会降低,并且其分布也会发生变化。
定制箱线图:凹口与颜色
Section titled “定制箱线图:凹口与颜色”我们可以轻松自定义图表外观并添加更多信息。可以添加凹口(notches),以便粗略指示中位数之间差异的显著性;如果两个箱子的凹口不重叠,则有力证据表明它们的中位数不同。我们还可以将变量(或设置固定颜色)映射到 fill 美学属性。
# 创建带凹口和颜色的定制箱线图boxplot_custom <- ggplot(data = input_data, aes(x = cyl, y = mpg, fill = cyl)) + geom_boxplot( notch = TRUE, # 为箱体添加凹口 outlier.color = "red", # 自定义异常点的颜色 outlier.shape = 4 ) + stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "white") + # 添加平均值点 labs( title = "Mileage Data Comparison", subtitle = "Notches indicate median confidence intervals. White diamonds are means.", x = "Number of Cylinders", y = "Miles Per Gallon (MPG)" ) + scale_fill_brewer(palette = "Pastel1") + # 使用调色板 theme_gray() + guides(fill = "none") # 隐藏多余的填充颜色图例
# 显示图表print(boxplot_custom)
# 将图表保存到文件ggsave("boxplot_with_notch.png", width = 8, height = 6)这个高级示例展示了 ggplot2 的几个特性:
notch = TRUE添加了置信区间凹口。- 诸如
fill这样的美学属性在aes()中进行映射,以实现数据驱动的着色。 stat_summary()添加了一个额外的层,显示平均值(可能与中位数不同)。scale_fill_brewer()应用了一个预定义、美观的调色板。