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

生信分析笔记 2024-06-21 17:35:03 阅读 54

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

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


加载R包与数据

library(ggpubr) library(patchwork) library(ggsci)library(tidyverse)# 使用R语言自带的iris数据集,并随机分成两组data <- irisdata$Group <- NAdata$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多平台发布



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。