R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

散点图可以直观反映数据的分布,箱线图可以展示均值等关键统计量,二者结合能够清晰呈现数据蕴含的信息。

本篇笔记主要内容:介绍R语言中绘制箱线图和散点图的方法,以及二者结合展示教程,添加差异比较显著性分析,绘制如上结果图。


加载R包与数据

复制代码
library(ggpubr) 
library(patchwork) 
library(ggsci)
library(tidyverse)
# 使用R语言自带的iris数据集,并随机分成两组
data <- iris
data$Group <- NA
data$Group[sample(1:nrow(data),size = (nrow(data)/2))] <- "A"
data$Group[is.na(data$Group)] <- "B"

在实际数据可视化过程中,输入数据格式也和上面类似,至少有两列,其中一列是分类,另一列是数值。

绘制箱线图

复制代码
ggplot(data,aes(x = Species,y = Sepal.Width)) +
    geom_boxplot(aes(fill = Species),alpha = 0.7)

这里将Species设置为x轴,Sepal.Width设置为y轴,箱子内部填充颜色与Species映射。

这段代码的作用是创建一个箱形图,显示不同物种(Species)的萼片宽度(Sepal.Width)分布,且不同物种的箱形用不同颜色表示,并且这些颜色半透明。

这种类型的图表通常用于展示和比较不同类别或组的数据分布情况,特别是中位数、四分位数等统计信息。

绘制散点图

复制代码
ggplot(data,aes(x = Species,y = Sepal.Width)) +
    geom_jitter(aes(color = Species))

利用ggplot2包创建散点图,并通过geom_jitter功能添加一些随机噪声来分散点,以便更清晰地展示数据。

绘制箱线图+散点图

复制代码
p <- ggplot(data,aes(x = Species,y = Sepal.Width)) +
    geom_boxplot(aes(fill = Species),alpha = 0.7)+
    geom_jitter(aes(color = Species))+
    scale_fill_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    scale_color_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    theme_bw()+
    theme(panel.grid = element_blank())
p

单因素多水平比较

对于两组以上的独立样品,如果数据同时满足正态性和方差齐性,可以采用方差分析(ANOVA)或者Kruskal检验,如果不满足可采用Kruskal检验。

复制代码
p <- p + stat_compare_means(
    method = "kruskal.test",
    label = "p.format",
    label.x = 2,
    label.y = 4,
    show.legend = F
)
p

可以看到上图中自动标注的显著性P值,通过修改label参数可以转换展示方式,默认显示检验方法和p值。

p.format只显示p值不显示检验方法,p.signif显示显著性水平符号,ns: p > 0.05、*: p <= 0.05、**: p <= 0.01、***: p <= 0.001、****: p <= 0.0001。

  • method:选择统计学检验的方法

单因素两两比较

如果想看两两之间的差异显著性,例如"setosa"和"versicolor",可以通过wilcox.test方法进行检验。

复制代码
# 首先设置比较的列表
compare_list <- list(
    c("setosa","versicolor"),
    c("versicolor","virginica")
p <- ggplot(data,aes(x = Species,y = Sepal.Width)) +
    geom_boxplot(aes(fill = Species),alpha = 0.7)+
    geom_jitter(aes(color = Species))+
    scale_fill_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    scale_color_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    theme_bw()+
    theme(panel.grid = element_blank())+
    stat_compare_means(
    comparisons = compare_list,
    method = "wilcox.test",
    label = "p.signif")
)

代码中stat_compare_means函数提供统计学检验,调节参数可以转换方法和展示方式。

双因素组内比较

如果引入分组信息作为另外一个因素,那么可以对每个水平内两组进行比较。

复制代码
p <- ggplot(data,aes(x = Species,y = Sepal.Length,color = Group))+
    geom_boxplot(aes(fill=Group),alpha=0.5)
p

箱线 + 散点

复制代码
p <- ggplot(data,aes(x = Species,y = Sepal.Length,color = Group))+
    geom_boxplot(aes(fill=Group),alpha=0.5)+
    geom_jitter(position = position_jitterdodge(jitter.width = 0.5,
                                                jitter.height = 0.5,
                                                dodge.width = 0.2))+
    scale_fill_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    scale_color_manual(values = c("#f79f1f","#a3cb38","#1289a7"))+
    theme_bw()
p

position_jitterdodge函数可以调整散点图的抖动范围,scale_fill_manual用于调整填充颜色,theme_bw用于设置主题,这段代码仅作图。

统计学检验

复制代码
p <- p + stat_compare_means(
    aes(group = Group),
    label = "p.format",
    show.legend = F,
    label.y = 8.5
)
p

这张图x轴是不同分类,每个分类下有A和B两组,y轴表示具体的值,每个分类上有P值标注。

在实际的分析可视化过程中,还要考虑实验设计、数据分布状态等因素,合理选择检验方法,并根据目的和需求修改相应参数。

本文由mdnice多平台发布

相关推荐
H10016 小时前
记录心态和工作变化
程序人生
卓律涤1 天前
【找工作系列①】【大四毕业】【复习】巩固JavaScript,了解ES6。
开发语言·前端·javascript·笔记·程序人生·职场和发展·es6
宇钶宇夕1 天前
MODBUS RTU通信协议详解与调试指南
运维·程序人生·自动化
ocean10102 天前
项目管理学习-CSPM-4考试总结
学习·程序人生
序属秋秋秋2 天前
我的创作纪念日——《惊变256天》
学习·程序人生·学习方法
Hygge-star2 天前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法
全栈派森3 天前
云存储最佳实践
后端·python·程序人生·flask
测试界萧萧4 天前
15:00开始面试,15:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
CIb0la4 天前
数据可视化
程序人生·算法·信息可视化
lkbhua莱克瓦244 天前
用C语言实现了——一个基于顺序表的插入排序演示系统
c语言·开发语言·数据结构·程序人生·github·排序算法·交互