2010-09-16 113 views
2

默認情況下,堆疊式條形圖使用基於色相的色階來區分條的不同部分。由於我的堆棧對應的因子水平是有序的,我想使用梯度比例。ggplot2中堆疊條形圖的顏色漸變

這裏有一些虛構的調查問卷的數據

dfr <- data.frame(
    question = c("Do you like R?", "How about Stack Overflow?"), 
    rubbish = c(2, 1), 
    so.so = c(7, 9), 
    yippee = c(41, 40) 
) 

mdfr <- melt(dfr, measure.vars = c("rubbish", "so.so", "yippee")) 

這裏是一個可行的情節,但沒有漸變色標

p1 <- ggplot(mdfr, aes(question, value, fill = variable)) + 
    geom_bar(position = "stack") + 
    coord_flip() 

如果我添加了漸變的規模,我得到告訴我,我應該使用一個數值變量,而不是分類。

p1 + scale_fill_gradient2() 
#Error: Non-continuous variable supplied to scale_fill_gradient2. 

如果我強迫填充顏色變量是數字,然後geom_bar抱怨說,它應該被堆積分類變量

ggplot(mdfr, aes(question, value, fill = as.integer(variable))) + 
    scale_fill_gradient2() + 
    geom_bar(position = "stack") + 
    coord_flip() 
#Error in pmin(y, 0) : object 'y' not found 

是否有辦法解決這?

編輯:

睡在這個問題之後,我想到了一個手動的規模可能是答案,但我不能讓該工作無論是。

cols <- c(rubbish = "red", so.so = "white", yippee = "blue") 
p1 + scale_colour_manual(values = cols) 
# Manual scale silently ignored 
+1

您需要填寫,不變色,你可能是最好關閉與colourbrewer尺度之一。 – hadley 2010-09-17 11:24:05

回答

1

哈德利的建議工程。

p1 + scale_fill_brewer(type = "div") 
0

你可能想嘗試:scale_fill_brewer(palette="RdYlGn")

我正在做一個類似的代碼和手冊不能很好地工作。

有了這個scale_fill_brewer您可以使用調色板顏色:RdYlGn,紅人等

相關問題