18

这是最初在此处提出的问题的重复:Indicating the statistics significant difference in bar graph but ask for R instead of python.

我的问题很简单。我想在 R 中生成条形图,如果可能的话,使用 ggplot2,并指示不同条形之间的显着差异,例如生成这样的东西。我进行了搜索,但找不到另一个问完全相同的问题。

条形图显示误差线和信号。 条形之间的差异标记

4

3 回答 3

19

我知道这是一个老问题,Didzis Elferts 的回答已经为这个问题提供了一个解决方案。但我最近创建了一个 ggplot-extension,它简化了添加重要性条的整个过程:ggsignif

无需繁琐地将geom_pathand添加annotate到您的绘图中,您只需添加一个图层geom_signif

library(ggplot2)
library(ggsignif)

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = list(c("versicolor", "virginica")), 
              map_signif_level=TRUE)

带显着性条的箱线图

CRAN提供了该软件包的完整文档。

于 2017-04-05T12:39:09.460 回答
18

您可以使用geom_path()andannotate()来获得类似的结果。对于此示例,您必须自己确定合适的位置。geom_path()提供了四个数字来获得连接线的那些小刻度。

df<-data.frame(group=c("A","B","C","D"),numb=c(12,24,36,48))
g<-ggplot(df,aes(group,numb))+geom_bar(stat="identity")
g+geom_path(x=c(1,1,2,2),y=c(25,26,26,25))+
  geom_path(x=c(2,2,3,3),y=c(37,38,38,37))+
  geom_path(x=c(3,3,4,4),y=c(49,50,50,49))+
  annotate("text",x=1.5,y=27,label="p=0.012")+
  annotate("text",x=2.5,y=39,label="p<0.0001")+
  annotate("text",x=3.5,y=51,label="p<0.0001")

在此处输入图像描述

于 2013-02-19T13:18:52.683 回答
4

我使用了上面建议的方法,但我发现 annotate 函数比 geom_path 函数更容易制作线条。只需使用“段”而不是“文本”。您必须按段分解并为每个线段定义起始和结束 x 和 y 值。

制作 3 条线段的示例:

annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125))
于 2016-10-17T20:48:17.607 回答