我有数百个箱型图,这些箱型图是从庞大的数据集中自动打印出来的,如果变量在所选组中具有统计显着性,则我编写了代码以对图“珊瑚”上色;如果未检测到显着性,则制造了代码。我做到了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)
要修改您的if...else
陈述,您应该反过来考虑(在这里,您要问“如果它不是<0.05,那么如果它是<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"
另一种选择是,如果您的p值在向量中,则可以尝试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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句