研究者常常要比较两组数据是否有统计学差异,并且要将这种差异在图形上通过线和注释标注出来。

ggplot2包是一个很好的可视化包,ggsignif包是ggplot2包的一个扩展包。

今天来学习怎么在ggplot2包绘制的图形上添加显着性差异注释。

1. 安装R包install.packages("ggplot2")  # 安装包install.packages("ggsignif") # 安装包library(ggplot2) # 加载包library(ggsignif) # 安装包

2. 加载数据

使用iris数据集。

iris也称鸢尾花卉数据集,包含150个数据样本,分为3类(setosa、versicolour、virginica),每类50个数据,每个数据包含4个属性(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。data(iris) # 加载数据集View(iris) # 预览数据集

3. 绘制箱型图

3.1 两组比较

比较数据集中versicolor组和virginica组的Sepal.Length(花萼长度)是否有统计学差异。ggplot(iris, aes(x=Species, y=Sepal.Length)) +   geom_boxplot() +  geom_signif(comparisons = list(c("versicolor", "virginica")))

如上图所示,可以看到两组是有统计学差异的,但是图中的P值使用的是科学计数法,其实还可以使用*或注释来表示。

通过添加参数map_signif_level=TRUE,可以将统计学差异表示为*符号。ggplot(iris, aes(x=Species, y=Sepal.Length)) +   geom_boxplot() +  geom_signif(comparisons = list(c("versicolor", "virginica")),              map_signif_level=TRUE)

3.2 多组两两比较

还是使用上面的数据集数据。

我们在图上添加3组数据两两比较的统计学差异P值。ggplot(iris, aes(x=Species, y=Sepal.Length)) +   geom_boxplot() +  geom_signif(comparisons = list(c("versicolor", "virginica"),                                 c("setosa", "virginica"),                                 c("versicolor", "setosa"))

如上图所示,虽然我们添加了P值,但是P值位置等参数有重叠,需要调整。ggplot(iris, aes(x=Species, y=Sepal.Length)) +   geom_boxplot() +  geom_signif(comparisons = list(c("versicolor", "virginica"),                                 c("setosa", "virginica"),                                 c("versicolor", "setosa")),              y_position=c(8.2, 8.5, 7.5),               map_signif_level=TRUE)

y_position中的数字与comparisons中的组别一一对应。

如果我们要调整横线两端的小竖线长度怎么调整?我想要使每根小竖线的长度各不相同。ggplot(iris, aes(x=Species, y=Sepal.Length)) +   geom_boxplot() +  geom_signif(comparisons = list(c("setosa", "versicolor"),                                 c("setosa", "virginica"),                                 c("versicolor", "virginica")),              y_position=c(7.5, 8.5, 8.2),               tip_length = c(0.2, 0.05, 0.2, 0.05, 0.1, 0.05),              map_signif_level=TRUE)

主要调整参数就是tip_length()参数,里面的小竖线长度要和组别也是一一对应。

4. 绘制条形图## 创建数据集dat ggplot(dat, aes(Group, Value)) +  geom_bar(aes(fill = Sub), stat="identity", position="dodge", width=.5) +  geom_signif(y_position=c(6.0, 8.5), xmin=c(0.85, 1.85), xmax=c(1.15, 2.15),              annotation=c("**", "NS"), tip_length=0.04) +   geom_signif(comparisons=list(c("S1", "S2")),              y_position = 9.3, tip_length = 0.04, vjust=0.2)

请注意:一般根据数据是否符合正态分布,选择合适的统计方法,上面的数据集我统计学方法都是默认的,可以使用函数中的test参数来指定统计学方法。

5. stat_signif()和geom_signif()函数stat_signif(mapping = NULL, data = NULL, position = "identity",  na.rm = FALSE, show.legend = NA, inherit.aes = TRUE,  comparisons = NULL, test = "wilcox.test", test.args = NULL,  annotations = NULL, map_signif_level = FALSE, y_position = NULL,  xmin = NULL, xmax = NULL, margin_top = 0.05, step_increase = 0,  tip_length = 0.03, size = 0.5, textsize = 3.88, family = "",  vjust = 0, parse = FALSE, manual = FALSE, ...)  geom_signif(mapping = NULL, data = NULL, stat = "signif",  position = "identity", na.rm = FALSE, show.legend = NA,  inherit.aes = TRUE, comparisons = NULL, test = "wilcox.test",  test.args = NULL, annotations = NULL, map_signif_level = FALSE,  y_position = NULL, xmin = NULL, xmax = NULL, margin_top = 0.05,  step_increase = 0, tip_length = 0.03, size = 0.5,  textsize = 3.88, family = "", vjust = 0, parse = FALSE,  manual = FALSE, ...)  ## 参数解释mapping # 由aes()或aes_()创建的美学映射集。如果指定且inherit.aes=TRUE(默认值),它将与绘图顶层的默认映射结合。如果没有绘图映射,则必须提供映射。data # 绘图数据所在的数据框position # 位置调整;可以是字符串,也可以是位置调整函数的结果na.rm # 逻辑词,默认为FALSE,移除缺失值时显示警告信息,为TRUE,则不显示警告信息。show.legend # 逻辑词,是否显示图例comparisons # 长度为2的向量列表test # 进行统计检验的方法名称,如t.test、wilcox.test、aov()、anova()、kruskal.test() 等。test.args # 检验方法的其他参数annotations # 替换P值注释的字符向量map_signif_level # 布尔值,检验结果P值使用注释或者星号代替y_position # 括号线在对齐y轴高度的数字向量xmin # 括号线左侧位置的数字向量xmax # 括号线右侧位置的数字向量step_increase # 数字向量,减少括号线的重叠tip_length # 数字向量,显示括号线两端的下降的小竖线,用来指向精确的组别size # 设置括号线的宽度textsize # 设置文本字体大小family # 设置文本字体vjust # 相对于括号线,上下调整文本的距离parse # 逻辑词,为TRUE,则标签将解析为表达式

参考资料stat_signif()和geom_signif()函数帮助文件

https://mp.weixin.qq.com/s/cjeoILJhZhQngXlm2ZZ4Eg

最近公众号改版,

以防失联,加个星标吧!

往期推荐

多点好看,少点脱发

ggplot2箱式图两两比较_如何在ggplot2图形上添加显著性差异注释?相关推荐

  1. ggplot2箱式图两两比较_个人向ggplot2箱线图总结

    主要从如何看图.用图与作图三个方面来对箱线图进行理解和总结. 1.看图 箱线图概述图1 箱线图概述图2 如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边 ...

  2. ggplot2箱式图两两比较_R语言ggplot2箱线图绘图总结

    主要从如何看图.用图与作图三个方面来对箱线图进行理解和总结. 1.看图 箱线图概述图1 箱线图概述图2 如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边 ...

  3. R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型、使用lattice包的bwplot函数使用箱图对比多个模型在多个指标上的性能差异

    R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型.并使用caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果.使用lattice包的 ...

  4. ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图

    介绍ggplot2包 使用形状.颜色和尺寸来对多元数据进行可视化 用刻面图比较各组 自定义ggplot2图 19.1 R中的四种图形系统 基础 grid lattice ggplot2(用的较多) g ...

  5. ggplot2箱式图两两比较_作图技巧024篇ggplot2在循环中的坑

    "ggplot2在循环中的输出"生活科学哥-R语言科学 2020-12-23  8:28ggplot2用过之后,你肯定会爱上它:结合一些不错的包,可以得到非常有展现力的图片,但是呢 ...

  6. ggplot2箱式图两两比较_ggplot2 - 箱线图(Box - plot)

    简介 箱线图,顾明思义,是形状像箱子并展示一组或多组数据分布的统计图,被认为是一个优于柱形图的数据可视化方案,文章中指出了很多箱线图的优点. 在ggplot2 中做箱线图的图形变换是geom_boxp ...

  7. opencv 安装_如何在 CentOS 8 上安装 OpenCV

    本文最先发表在: 如何在 CentOS 8 上安装 OpenCV​www.itcoder.tech OpenCV(Open Source Computer Vision Library) 是一个开源的 ...

  8. java pdf添加透明水印_如何在PDF文件中添加透明水印

    原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...

  9. html画布图片不显示_如何在HTML5画布上显示图像

    html画布图片不显示 by Nash Vail 由Nash Vail Ok, so here's a question: "Why do we need an article for th ...

最新文章

  1. 轮椅上的博士矣晓沅:9 年求学路,我从清华毕业了
  2. 浅谈主流内存发展历史
  3. boost::mp11::mp_with_index相关用法的测试程序
  4. 【计算机基础】存储器层次 Memory hierarchy
  5. C++Vector使用方法
  6. 数据结构整理中。。。
  7. 怎么用vc采集ni卡数据_8bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850
  8. OpenCV3学习(6.2)——霍夫(Hough)变换:霍夫线变换HoughLine,霍夫圆变换HoughCircles
  9. 周志华:AAAI 2019论文提交创纪录,达到7745篇
  10. 单例设计模式共享数据分析、解决,call_once
  11. python制作查询工具发给别人使用_利用Python制作简单的小程序:IP查
  12. 双屏鼠标经常跑到副屏_双屏游戏本什么体验?上手ROG冰刃双屏:效率直接拉满...
  13. 【全文干货】python—函数详解(值得收藏的学习手册)
  14. android屏幕截图代码,android中实现整个屏幕截图的代码
  15. Python:货币转换(写一个程序进行人民币和美元货币之间的币值转换)
  16. Opencv项目实战:05 物体检测
  17. 淘宝数据魔方技术架构
  18. 【转载】 Sqlserver使用Left函数从最左边开始截取固定长度字符串
  19. 63.QT-重写QStackedWidget模仿iphone的home界面,实现左右滑动
  20. birthday日期类型转化

热门文章

  1. Element时间转换时间戳
  2. python桌面爬虫_Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】...
  3. 学生表S,课程表C,学生课程表SC
  4. 校OJ-P1454 让我们荡起双桨 (学习进步)
  5. 使用远程桌面鼠标移动缓慢问题的解决方法
  6. 【ConfluxNews】2023.3.14 警惕虚假账号和钓鱼网址
  7. mega2560的串口1问题
  8. apache hawq
  9. BCP命令,导入导出CSV文件
  10. 计算机房铺什么样的地板,机房铺哪种地板好些