首页 文章

R - 根据p值绘制颜色图

提问于
浏览
1

我有数百个箱形图从我庞大的数据集中自动打印出来,如果变量在所选组中具有统计显着性,并且如果未检测到显着性,则我已经编制了代码来为图表着色'coral' . 这是我用 col=ifelse(...< 0.05,'coral','aquamarine') 做的 .

如果箱形图根据p值着色,我的输出会更容易浏览 . 因此,我想告诉 col=... 来自变量的颜色图,其中p值在0.05-0.01到黄色,0.01-0.005到橙色和<0.005到红色的范围内 .

我试过这个

boxplot(a~b, data=df, col=if(pv1<0.05)"yellow" else if (pv1<0.01) "orange" else if (pv1<0.005) "red" else "green")

正如您所看到的那样,这不会因为值重叠而发生 . 我需要做的是在 if 句子中写下范围,但我只是不知道如何 .

这是一些可以使用的数据 . 请注意,组的实际p值与此处给出的不同 . 我只显示pv1,2和3,以便您可以测试代码 .

a <- c(23,24,64,12,4,75,12,65,86,76)
b <- c(1,2,2,1,2,1,3,3,1,3)
df  <-  data.frame(a,b)
pv1  <- c(0.05)
pv2  <- c(0.01)
pv3  <- c(0.005)

1 回答

  • 2

    要修改你的 if...else 语句,你应该反过来思考(这里,你要求"if it is not < 0.05, then if it is < 0.01..."这是不可能的),所以你可以写:

    col=if(pv1<0.005)"red" else if (pv1<0.01) "orange" else if (pv1<0.05) "yellow" else "green"
    

    pv1 <- 0.04 ; if(pv1<0.005)"red" else if (pv1<0.01) "orange" else if (pv1<0.05) "yellow" else "green" # "yellow"
    pv1 <- 0.004 ; if(pv1<0.005)"red" else if (pv1<0.01) "orange" else if (pv1<0.05) "yellow" else "green" # "red"
    pv1 <- 0.06 ; if(pv1<0.005) "red" else if (pv1<0.01) "orange" else if (pv1<0.05) "yellow" else "green" # "green"
    pv1 <- 0.006 ; if(pv1<0.005) "red" else if (pv1<0.01) "orange" else if (pv1<0.05) "yellow" else "green" # "orange"
    

    Another option ,如果你的pvalues在向量中,你可以试试 cut

    mycolours <- as.character(cut(pv1, ,c(1,0.05,0.01,0.005,0), right=F, labels=c("red","orange","yellow","aquamarine"), include.lowest=T))
    

    然后

    boxplot(a~b, data=df, col=mycolours)
    

相关问题