使用R对箱图中的特定组数据进行重新排序和着色

时间:2016-12-23 23:47:17

标签: r sorting colors boxplot pairing

问题可能与此问题类似:Colouring different group data in boxplot using r,但我需要突出显示特定列并找到:http://www.r-graph-gallery.com/23-add-colors-to-specific-groups-of-a-boxplot/

此外,我按平均值对图表进行排序,类似于: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")))))

现在。更改&#34; trait&#34;时,我会发现数据会重新排序,颜色会重新排序,并与数据配对。但它根本不起作用。颜色根据样品的字母顺序设置:蓝色(cpt12),绿色(cpt13),红色(cpt2)和黄色(cpt30),无论重新排序后的样品位于x轴上。

原始文件的较小版本可在此处使用:https://drive.google.com/file/d/0B1kEh3I4podcaUd5NWJaNkhPS0E/view

1 个答案:

答案 0 :(得分:1)

颜色矢量的顺序与绘制的框的顺序一致。因此,如果箱图中的框的顺序重新排列,则必须重新排列颜色。在您的情况下,您正在重新排列第一行代码中的级别顺序 在这个解决方案中,我创建了一个数据框,以匹配预期的水平与所需的颜色,并包括一个额外的默认值。然后使用匹配函数,我按正确的顺序创建颜色矢量。

试试这个:

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)