ggplot2|从0开始绘制箱线图

简介: ggplot2|从0开始绘制箱线图

本文首发于“生信补给站”公众号 ggplot2|从0开始绘制箱线图

继续“一图胜千言”系列,箱线图通过绘制观测数据的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了变量值的分布情况。箱线图能够显示出离群点(outlier),通过箱线图能够很容易识别出数据中的异常值。

image.png

本文利用R语言的ggplot2包,从头带您绘制各式各样的箱线图。


一 绘制基本的箱线图

载入数据及函数包


library(ggplot2)
library(RColorBrewer)

dose数值 变成因子变量


ToothGrowth$dose <- as.factor(ToothGrowth$dose) 
head(ToothGrowth) #查看数据集
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5

1)geom_boxplot绘制基本的箱线图

使用ToothGrowth数据集,dose变量为分类横坐标,对len变量做箱线图


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()

旋转箱线图方向并设置notch


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot(notch=TRUE) + coord_flip()

image.png

2)修改异常点的属性

设置outlier的 color, shape and size


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot(outlier.colour="red", outlier.shape=18,outlier.size=4)


此外, outlier.fill:离群点的填充色;outlier.alpha:离群点的透明度


3)选择变量,设定顺序


ggplot(ToothGrowth, aes(x=dose, y=len)) + 
geom_boxplot() + 
stat_summary(fun.y=mean, geom="point", shape=23, size=4, col = "red") +  #添加均值
scale_x_discrete(limits=c("2", "0.5")) #选择变量,更改顺序

4)添加最大值和最小值的两条须线


ggplot(ToothGrowth, aes(x=dose, y=len)) + 
stat_boxplot(geom = "errorbar",width=0.15) + #添加虚线
geom_boxplot()

image.png

5)箱线图添加点

geom_point函数,向箱线图中添加点;


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot() + geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1)

geom_jitter()函数是geom_point(position = "jitter")的包装,binaxis="y"是指沿着y轴进行分箱;


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot() + geom_jitter(shape=16, position=position_jitter(0.2))


二 颜色设置

aes(color=)函数为每个箱线图设置一个颜色,划分箱线图之后,可以使用scale_color_*()函数自定义颜色。


1)分组更改箱线的颜色


p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) + geom_boxplot()
p

image.png

自定义颜色方案


# Use custom color palettes
p+scale_color_manual(values=c("#999999", "#E69F00", "skyblue"))
# Use brewer color palettes
p+scale_color_brewer(palette="Set3")+ theme_classic()
# Use grey scale
p + scale_color_grey() + theme_classic()

image.png

2)更改箱子填充颜色

fill 填充色 ; color 箱线的外框颜色

#单组 设置颜色


ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot(fill='#A4A4A4', color="black")+ theme_classic()

#分组 设置颜色 , 自定义颜色设置方案同上


ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) + geom_boxplot() + scale_fill_brewer(palette="Dark2") + theme_classic()

image.png

三 图例,标题设置


1)设置legeng

Legend是对箱线图的解释性描述,默认的位置是在画布的右侧中间位置,可以通过theme()函数修改Legend的位置


p + theme(legend.position="top")
p + theme(legend.position="bottom")
p + theme(legend.position="none") # Remove legend

2)labs设置标题及坐标标签


p+theme(legend.position="bottom") + labs(title="Plot of length  per dose",x="Dose (mg)", y = "Length")

image.png

3)其他theme详细设置可参考ggplot2-theme(主题)以及ggplot2-图形微调(1)


四 箱线图汇总展示


ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) + 
  stat_boxplot(geom = "errorbar",width=0.15)+
  geom_boxplot()+
  geom_dotplot(binaxis='y', stackdir='center', dotsize=0.5, binwidth = 1)+
  labs(title="Plot of length  per dose",x="Dose (mg)", y = "Length")+
  scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9")) + 
  theme(legend.position="none")+
  theme_minimal()

image.png


五 参考资料

http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization

ggplot2:数据分析与图形艺术


好了,就是这么简单,输出基本图形后,根据自己的喜好进行细节的调整即可。

相关文章
|
Kubernetes 应用服务中间件 nginx
提升K8S故障排除效率:详解Pod内抓包的高效策略!
提升K8S故障排除效率:详解Pod内抓包的高效策略!
675 0
|
Linux PHP
阿里云centos7.6安装php7.3的详细教程
阿里云centos7.6安装php7.3的详细教程
852 0
|
9月前
|
人工智能 JavaScript 前端开发
一个支持阿里云百炼平台DeepSeek R1大模型(智能体)的Wordpress插件,AI Agent or Chatbot.
这是一个将阿里云DeepSeek AI服务集成到WordPress的聊天机器人插件,支持多轮对话、上下文记忆和自定义界面等功能。用户可通过短代码轻松添加到页面,并支持多种配置选项以满足不同需求。项目采用MIT协议授权,代码仓位于GitHub与Gitee。开发者Chi Leung为长期境外工作,代码注释以英文为主。适合需要在WordPress网站中快速部署AI助手的用户使用。
|
6月前
|
数据采集 运维 BI
Python 文件操作进阶|使用 shutil 实现高效文件复制
在开发和运维中,处理大量文件是常见需求,如备份配置、归档日志或构建部署包。手动复制粘贴已无法满足高效需求!Python 的 `shutil` 模块提供了强大的文件操作功能,支持单文件复制、目录树迁移及自动化任务构建。本文详解 `shutil.copy()` 基础用法与进阶技巧,如批量复制、自动路径检测、时间戳命名备份等,助你实现高效自动化。结合实战案例(如自动备份系统),让你的代码更专业!学习后,欢迎交流心得,一起精进 Python 技能。关注我,获取更多编程技巧与源码分享!
|
数据可视化 数据库
scRNA分析|使用CellChat完成细胞通讯分析-简单且可视化出众,代码自取
scRNA分析|使用CellChat完成细胞通讯分析-简单且可视化出众,代码自取
2672 1
|
数据采集 数据可视化 大数据
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
这篇文章介绍了如何使用Python中的matplotlib和numpy库来创建箱线图,以检测和处理数据集中的异常值。
359 1
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
|
编译器 Go C语言
Zig 基本语法
Zig 基本语法
289 3
|
关系型数据库 数据处理 PostgreSQL
在 Postgres 中使用 Split Part
【8月更文挑战第11天】
1091 0
在 Postgres 中使用 Split Part
|
存储 移动开发 算法
《阿里大数据之路》读书笔记:第二章 日志采集
《阿里大数据之路》读书笔记:第二章 日志采集
|
数据可视化 数据挖掘 Python
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库
1605 0
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库