2

这个问题可能看起来类似于这个:Coloring different group data in boxplot using r,但我需要突出显示特定列并发现:http ://www.r-graph-gallery.com/23-add-colors-to -箱线图的特定组/

此外,我按平均值对图表进行排序,类似于: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轴上的哪个位置。

此处提供原始文件的较小版本:https ://drive.google.com/file/d/0B1kEh3I4podcaUd5NWJaNkhPS0E/view

4

1 回答 1

1

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

尝试这个:

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)
于 2016-12-24T00:25:56.887 回答