如何在barplot中添加显着性指示(星星)?

时间:2017-12-13 14:33:16

标签: r plot

这是我的数据:

dput(dt)
structure(c(15236000, 0, 0, 0, 0, 36722900, 45971100, 0, 0, 0, 
            0, 99067800, 91416000, 0, 0, 0, 0, 219396000, 230630600, 0, 0, 
            0, 0, 254380400, 354388700, 0, 0, 0, 0, 438443760, 462991400, 
            0, 0, 0, 0, 497156100, 235045400, 0, 0, 0, 0, 290932300, 168440600, 
            0, 0, 0, 0, 196797700, 362305500, 0, 0, 0, 0, 375372400, 1367158670, 
            0, 0, 0, 0, 1122186600, 978435120, 0, 0, 0, 0, 983735500, 2104276960, 
            0, 0, 0, 0, 2220253960, 1267607300, 0, 0, 0, 0, 1323143500, 1080187900, 
            0, 0, 0, 0, 1410693500, 840738200, 0, 0, 0, 0, 1226346700, 1139340100, 
            0, 0, 0, 0, 1758611700, 2425368000, 0, 0, 0, 0, 3150723500, 3141234200, 
            0, 0, 0, 0, 4124976700, 2880830100, 0, 0, 0, 0, 4403308600, 2923459800, 
            0, 0, 0, 0, 4360192600), .Dim = c(3L, 40L), .Dimnames = list(
              NULL, c("10", "10", "34", "34", "59", "59", "84", "84", "110", 
                      "110", "134", "134", "165", "165", "199", "199", "234", "234", 
                      "257", "257", "362", "362", "433", "433", "506", "506", "581", 
                      "581", "652", "652", "733", "733", "818", "818", "896", "896", 
                      "972", "972", "1039", "1039")))

这是我用来生成条形图的代码:

n <- barplot(dt, axisnames = FALSE, las=1, offset = 0.1, col=c("gold1", "grey", "darkgray"), space=c(0, rep(c(0,0.5), (ncol(dt)-2)/2), 0),
             ylim = c(0,5e9))
axis(1, at=(n[-length(n)] + diff(n)/2)[c(TRUE, FALSE)], labels = unique(colnames(dt)), lwd = 0)
legend("topleft",legend = c("Peter","Mark") , col=c("gold1", "darkgray"), pch=15)

最后,pvalues的向量和我想用0.05作为截止值:

dput(vec_sign)
structure(c(0.26568675227896, 0.231295165962475, 0.146062122767301, 
            0.0187166701304913, 0.266800697199367, 0.566155201859571, 0.209901856029658, 
            0.364700152093356, 0.60914593877063, 0.335501894803805, 0.857979911768549, 
            0.201770045767981, 0.247547900482962, 0.0238847396218355, 0.00166753510687916, 
            2.33535556849617e-05, 0.0803932103358651, 0.181860618123498, 
            0.000584951559321768, 0.000349070394928198), .Names = c("10", 
                                                                    "34", "59", "84", "110", "134", "165", "199", "234", "257", "362", 
                                                                    "433", "506", "581", "652", "733", "818", "896", "972", "1039"
            ))


vec_sign <  0.05

我希望在我的条形图中的特定条形图上方有漂亮的星号,当您应用最后一段显示的代码时,TRUE将显示该星号。

2 个答案:

答案 0 :(得分:4)

test <-vec_sign <  0.05
seqeven<-seq(from=1,to=length(n)-1,by=2)
seqodd<-seq(from=2,to=length(n),by=2)
y=pmax(dt[1,seqeven],dt[3,seqodd])[test]+1e8
x=n[seqeven][test]+0.5
text(x,y,"*")

enter image description here

答案 1 :(得分:2)

这是一种方法:

xpos <- seq(1, 48.5, by = 2.5)
for(i in seq_along(vec_sign)) {
  ypos <- max(dt[, c(2*i-1, 2*i)]) * 1.05
  if(vec_sign[i] <= 0.05) text(x = xpos[i], y = ypos, "*")
}