2013-11-21 86 views
5

我有這樣簡單的代碼(數據+ barplot):GGPLOT2:barplot顏色作爲y軸值的函數

dat <- c('Jan','Feb','Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') 
val <- c(-2.5, 3, 2.5, -3.3, -1, 0.2, 6, 4.3, 5.5, 2, -1.9, -2.3) 
df <- data.frame(dat, val) 
bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val)) + 
    geom_bar(stat = 'identity') 
print(bar) 

別處我使用以下調色板創建的熱圖:

# Palette 
LtoM <-colorRampPalette(c('red', 'yellow')) 
Mid <- "snow3" 
MtoH <-colorRampPalette(c('lightgreen', 'darkgreen')) 

被名爲:

scale_fill_gradient2(low = LtoM(100), mid = Mid, high = MtoH(100)) 

現在我想用類似的調色板我barplot,那是我想合作lor在每個酒吧是一個高度的函數(從紅色的最小y到最大y的某個等級)。

請問我該怎麼做?

回答

3

你基本上就在你的當前代碼中。只需添加scale_fill_gradient函數即可。

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low=LtoM(100), mid='snow3', 
     high=MtoH(100), space='Lab') 

custom colors

然而,允許scale_fill_gradient2採取梯度ING的護理工作得很好

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low='red', mid='snow3', high='darkgreen', space='Lab') 

generated colors

+0

感謝回答lilster。其實我知道如何得到你的第一張圖,但是這並不完全是我所追求的。當val = 5(以及中間的一個顏色刻度)時,我想要val val = -2的所有酒吧爲'紅色'和'綠色'。它是不同的比每個酒吧上色(一致)取決於它代表的價值。我希望我現在更清楚一點 – tagoma

+0

我想我需要更多細節。 '我要val val = -2時,所有的酒吧在val = 5時都是'紅色'和'綠色'(中間還有一個色標)''。 < - 我發佈的兩張圖似乎都滿足了這一點。 '是不同的,根據它代表的值,每根條都有顏色(一致)。' < - 這是不同的,但在我的答案中,兩種顏色都沒有統一着色。 比例填充漸變已將您的最小值設置爲「最紅」,您的最大值爲「最綠」,然後是中間的一個色階。 你能描述一下你是如何區別於你正在尋找的,也許是一個圖像文件attache – lilster

+0

hello lilster感謝你的耐心:)我想繪製一個情節'像'這一個http://www.quinn-curtis .com/QCChar96.jpg你可以看到,在任何y值下,所有的條都是相同的顏色,顏色是y值的函數。 – tagoma