使用R表示条形图中的统计上显着的差异

时间:2013-02-19 13:00:18

标签: r ggplot2 bar-chart

这是最初在这里问到的一个问题的重复:Indicating the statistically significant difference in bar graph但是要求R而不是python。

我的问题非常简单。我想在R中生成条形图,如果可能的话使用ggplot2,并指出不同条形之间的显着差异,例如:产生这样的东西。我有一个搜索,但找不到另一个问题完全相同的事情。

bar plot showing error bars and sig. diff marking beween bars

3 个答案:

答案 0 :(得分:16)

您可以使用geom_path()annotate()来获得类似的结果。对于此示例,您必须自己确定合适的位置。在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")

enter image description here

答案 1 :(得分:15)

我知道这是一个古老的问题,Didzis Elferts的答案已经为这个问题提供了一个解决方案。但我最近创建了一个ggplot扩展,简化了添加显着性条的整个过程:ggsignif

您只需添加单个图层geom_path,而不是繁琐地将annotategeom_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)

Boxplot with significance bar

该软件包的完整文档可在CRAN获得。

答案 2 :(得分:3)

我使用了上面提到的方法,但我发现注释函数比geom_path函数更容易创建行。只需使用“段”而不是“文本”。您必须按段拆分并定义每个线段的起始和结束x和y值。

制作3个线段的示例:

val iterator = batchReader.iterator

while(iterator.hasNext) {
 println(iterator.next.getKey().toString())
}