利用R绘制箱线图
绘制箱线图
利用R语言绘制箱线图非常方便,主要通过 boxplot() 函数或ggplot2包实现。
注意:
箱线图中的箱子表示数据的四分位距(IQR);
箱体内的线表示中位数;
须线通常延伸到1.5倍IQR范围内的最远数据点;
超出须线的点被视为异常值。
欢迎大家在评论区留言或私信,交流学习心得或学习R的过程中遇到的问题。感谢大家的支持和关注,您的支持是我创作的最大动力。
目录
- 绘制箱线图
- 1.利用boxplot绘制
- 2.利用ggplot2绘制
- 3.其他
1.利用boxplot绘制
R自带了很多数据集,例如 mtcars,我们可以用其中的 mpg(英里/加仑)数据来绘制箱线图。
- 绘制基本的箱线图
# 查看数据前几行
head(mtcars)# 绘制基础的箱线图
boxplot(mtcars$mpg,main = "汽车每加仑里程箱线图", # 标题ylab = "英里/加仑", # Y轴标签xlab = "总样本", # X轴标签col = "lightblue") # 箱体颜色
出图效果如下:
- 按分组绘制箱线图
比较不同气缸数(cyl)汽车的每加仑里程。
# 将cyl转换为因子,以便正确分组
mtcars$cyl <- as.factor(mtcars$cyl)# 按分组绘制
boxplot(mpg ~ cyl, data = mtcars,main = "不同气缸数的汽车每加仑里程",xlab = "气缸数",ylab = "英里/加仑",col = c("lightgreen", "lightblue", "lightyellow"))
出图效果如下:
2.利用ggplot2绘制
首先安装并加载包
install.packages("ggplot2") # 如果尚未安装
library(ggplot2)
- 基础箱线图
ggplot(mtcars, aes(x = cyl, y = mpg)) +geom_boxplot(fill = "lightblue", alpha = 0.7) + # alpha控制透明度labs(title = "不同气缸数的汽车每加仑里程",x = "气缸数",y = "英里/加仑") +theme_minimal() # 使用简洁主题
出图效果如下:
- 添加数据点(抖动点)
为了显示原始数据的分布,可以在箱线图上叠加数据点。
ggplot(mtcars, aes(x = cyl, y = mpg)) +geom_boxplot(fill = "lightblue", outlier.colour = "red") + # 异常点标为红色geom_jitter(width = 0.2, alpha = 0.6, color = "blue") + # 添加抖动点labs(title = "箱线图与数据点",x = "气缸数",y = "英里/加仑") +theme_classic()
出图效果如下:
3.其他
- 水平箱线图
只需在 boxplot() 中添加 horizontal = TRUE 参数,或在 ggplot2 中使用 coord_flip()。
# 基础方法
boxplot(mpg ~ cyl, data = mtcars, horizontal = TRUE)# ggplot2方法
ggplot(mtcars, aes(x = cyl, y = mpg)) +geom_boxplot(fill = "lightcoral") +coord_flip() + # 坐标轴翻转labs(title = "水平箱线图")
出图效果如下:
- 自定义
自定义颜色和外观
ggplot(mtcars, aes(x = cyl, y = mpg, fill = cyl)) + # 按cyl填充颜色geom_boxplot(alpha = 0.8, outlier.shape = 16, # 异常点形状outlier.size = 2, # 异常点大小outlier.color = "red") +scale_fill_brewer(palette = "Set2") + # 使用ColorBrewer调色板labs(title = "自定义颜色的箱线图") +theme_bw() + # 黑白主题theme(legend.position = "none") # 隐藏图例
出图效果如下:
- 不显示异常值的箱线图
boxplot(mpg ~ cyl, data = mtcars, outline = FALSE) # outline = FALSE# 在ggplot2中
ggplot(mtcars, aes(x = cyl, y = mpg)) +geom_boxplot(fill = "lightblue", outlier.shape = NA) # outlier.shape = NA
出图效果如下:
※※大家在使用的时候遇到任何问题欢迎留言,您的支持是我创作的最大动力。※※