2016-03-19 72 views
0

我試圖有條件地對箱子顏色代碼進行顏色編碼,但它不一致。我希望有人能夠確定問題所在。我希望不能使用ggplot,因爲我對R很新,並且想堅持我所知道的(現在)。R - 箱子情節有條件的顏色不工作

本質上,我製作了一系列箱形圖,其中9個箱子中的2個需要不同的顏色。我無法指定顏色模式,因爲兩個框的位置在每個圖形的x軸上都會發生變化。我有一個標有「Control」的列,其值爲0,2或4.我希望所有值爲Control = 0的都是gray80,Control = 4是gray40,Control = 2是白色的。我試圖通過兩種方式來實現:

#BoxPlot with Conditional Coloring, ifelse statement 
boxplot(Y~X, ylab="y", 
xlab="x", 
col=ifelse(Control>=3, "gray40", ifelse(Control<=1, "gray80","white"))) 

#Colors 
colors <- rep("white", length(Control)) 
colors[Control=4] <- "gray40" 
colors[Control=0] <- "gray80" 

#BoxPlot with Conditional Coloring, "Colors" 
boxplot(Y~X, ylab="y", 
xlab="x", 
col=colors) 

在箱線圖連接,只有前兩個箱子應該在有色誰能告訴我我在做什麼錯? 1

+0

如果有機會的話,你可能會掀起[重複的例子(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-可再現-例子)?在那之前,你可以嘗試'ifelse(Control == 0,「gray80」,ifelse(Control == 2,「white」,「gray40」))''。 –

回答

0

這裏有兩種方法可以解決這個問題。如果它不適合你,一個可重複的例子就是要走的路(參見你的原始問題下的評論)。

xy <- data.frame(setup = rep(c(0, 2, 4), 50), value = rnorm(150)) 

boxplot(value ~ setup, data = xy) 

boxplot(value ~ setup, data = xy, col = ifelse(xy$setup == 0, "gray80", ifelse(xy$setup == 2, "white", "gray40"))) 

library(ggplot2) 

xy$setup <- as.factor(xy$setup) 


ggplot(xy, aes(y = value, fill = setup, x = setup)) + 
    theme_bw() + 
    geom_boxplot() + 
    # order of colors is determined by the order of levels of xy$setup 
    scale_fill_manual(values = c("gray80", "white", "gray40")) 

enter image description here