2016-12-23 81 views
2

问题可能类似于此之一:Colouring different group data in boxplot using r,但我需要突出显示特定列和发现这一点:http://www.r-graph-gallery.com/23-add-colors-to-specific-groups-of-a-boxplot/重新排序和着色在箱线图特定组数据,,使用R

此外,我被排序的曲线图意思是说,类似这样的:Sorting a boxplot based on median value

最终的结果应该是这样的:

bymean <- with(data, reorder(sample, trait, mean, na.rm = TRUE)) 
boxplot(trait~bymean, data=data, 
     col=ifelse(levels(data$sample)=="cpt2", "red", 
      ifelse(levels(data$sample)=="cpt12", "blue", 
      ifelse(levels(data$sample)=="cpt13", "green", 
      ifelse(levels(data$sample)=="cpt30", "yellow", "grey"))))) 

现在。当改变“特质”时,我认为数据会重新排序,颜色也会重新排序,并与数据配对。但它根本不起作用。颜色根据样品的字母顺序设置:蓝色(cpt12),绿色(cpt13),红色(cpt2)和黄色(cpt30),无论样品在重新排序后位于x轴上。

原始文件availble的这里的缩小版本:https://drive.google.com/file/d/0B1kEh3I4podcaUd5NWJaNkhPS0E/view

回答

1

颜色矢量的顺序对齐的顺序来框绘制。因此,如果boxplot中的框的顺序重新排列,那么必须重新排列颜色。在你的情况下,你正在重新排列第一行代码中的级别顺序。
在此解决方案中,我创建了一个数据框,以将预期水平与所需颜色相匹配,并包含一个额外的默认值。然后使用匹配函数,按照正确的顺序创建颜色矢量。

尝试这种情况:

bymean <- with(data, reorder(sample, trait, mean, na.rm = TRUE)) 
colordf<-data.frame(fac=c("cpt2", "cpt12", "cpt13", "cpt30", NA), 
        color = c("red", "blue", "green", "yellow", "grey")) 

plotcolor<-colordf$color[match(levels(bymean), colordf$fac, nomatch=5)] 

boxplot(trait~bymean, data=data, 
     col=plotcolor) 
+1

plotcolor <-colordf $颜色[匹配(电平(bymedian),colordf $ FAC,NOMATCH = 5)] 到 plotcolor <-colordf $颜色[匹配(电平( bymean),colordf $ fac,nomatch = 5)] –

+0

谢谢,进行了更正。 – Dave2e

+0

添加了原始文件 –