问题可能与此问题类似: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
答案 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)