R - 根据p值绘制颜色图

时间:2015-03-31 07:05:42

标签: r plot

我有数以百计的箱形图从我庞大的数据集中自动打印出来,我已经编制了代码来为情节和珊瑚色彩设置颜色。如果变量在所选组和“海蓝宝石”中具有统计学意义。如果未检测到重要性。这是我用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 个答案:

答案 0 :(得分:2)

要修改你的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"

另一个选项,如果你的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)