2016-12-23 65 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

添加了原始文件 –