2013-02-28 183 views
21

我注意到,這裏Box and whiskers plot電話:更改ggplot因子顏色?

p + geom_boxplot(aes(fill = factor(cyl))) 

產生明亮的紅/綠/藍三色的箱圖填補,而:

p + geom_boxplot(aes(fill = factor(vs))) 

生成的顏色明顯淺綠色/紅色。在我的數據,我得到了第二組的顏色,但想在第一組(如在

p + geom_boxplot(aes(fill = factor(cyl))) 

什麼控制這組顏色ggplot使用以及如何改變呢?

感謝

回答

29

默認的顏色間隔均勻的色調在色輪上你可以檢查這是如何從here產生

您可以使用scale_fill_manual與那些顏色:。

p + scale_fill_manual(values=c("#F8766D", "#00BA38")) 

在這裏,我用ggplot_build(p)$datacyl得到的顏色。

或者,也可以使用其他的調色板以及像這樣:

p + scale_fill_brewer(palette="Set1") 

,並找到在調色板上的顏色,你可以這樣做:

require(RColorBrewer) 
brewer.pal(9, "Set1") 

檢查包裝是否知道調色板和其他選項,如果你有興趣。

編輯: @ user248237dfsf,因爲我已經在頂部的鏈接中指出,從@Andrie此功能顯示的顏色產生:

ggplotColours <- function(n=6, h=c(0, 360) +15){ 
    if ((diff(h)%%360) < 1) h[2] <- h[2] - 360/n 
    hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65) 
} 

> ggplotColours(2) 
# [1] "#F8766D" "#00BFC4" 

> ggplotColours(3) 
# [1] "#F8766D" "#00BA38" "#619CFF" 

如果你看一下產生的兩種顏色,第一個是相同的,但第二個顏色不一樣,當n = 2和n = 3時。這是因爲它產生顏色均勻間隔色調。如果你想使用cyl的顏色作爲vs,那麼你必須設置scale_fill_manual並使用這個函數生成n = 3的顏色。

要驗證這確實是發生了什麼事,你可以這樣做:

p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(cyl))) 

p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(vs))) 

現在,如果你這樣做:

ggplot_build(p1)$data[[1]]$fill 
# [1] "#F8766D" "#00BA38" "#619CFF" 

ggplot_build(p2)$data[[1]]$fill 
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D" 

你看,這些都是正在使用ggplotColours和產生的顏色差異的原因也很明顯。我希望這有幫助。

+2

但是,這並不能解釋爲什麼一個變量繪成因素你得到一組顏色,併爲不同的一個你會得到另一套顏色像我鏈接到的文檔頁面。顏色間隔均勻,我可以看到,但爲什麼它們之間有所不同?我希望它看起來像第一個不是第二個。 – user248237dfsf 2013-02-28 13:35:40

+0

能夠手動設置色相輪上每種顏色之間的步距將會很好。這樣我們可以在連續因素之間獲得更大的對比。在360之後,它應該從0開始繼續。 – JohannesNE 2015-05-28 10:51:29

5

添加到以前的答案:

當使用col審美(而不是fill),使用scale_color_manual。這對於geom_point()是有用的:

myColors <- c("#56ddc5", "#ff3db7", "#4699dd") 
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
    geom_point() + 
    scale_color_manual(values=myColors) 

enter image description here