2014-09-29 138 views
3

我想修改顏色漸變以匹配一組預定義的閾值/切點和顏色。我怎樣才能做到這一點?如何使用ggplot2和geom_tile創建自定義色階?

臨界值:-0.103200,0.007022,0.094090,0.548600 顏色: 「#EDF8E9」, 「#BAE4B3」, 「#74C476」, 「#238B45」

#Create sample data 

     pp <- function (n,r=4) { 
       x <- seq(-r*pi, r*pi, len=n) 
       df <- expand.grid(x=x, y=x) 
       df$r <- sqrt(df$x^2 + df$y^2) 
       df$z <- cos(df$r^2)*exp(-df$r/6) 
       df 
      } 

      pp(20)->data 

#create the plot 

library(ggplo2) 
      p <- ggplot(pp(20), aes(x=x,y=y)) 
      p + geom_tile(aes(fill=z)) 

#Generate custom colour ramp 

library(RColorBrewer) 

cols <- brewer.pal(4, "Greens") 

回答

3

您可以試試scale_fill_brewer。首先,你的倉z值:

df <- pp(20) 
df$z_bin <- cut(df$z, breaks = c(-Inf, -0.103200, 0.007022, 0.094090, 0.548600)) 

簡介:

ggplot(data = df, aes(x = x, y = y, fill = z_bin)) + 
    geom_tile() + 
    scale_fill_brewer(palette = "Greens") 

enter image description here

3

使用cut和匹配的垃圾箱到你的顏色。我的代碼假設-0.103200是您的矢量的最小值(用於對垃圾箱數量進行排序)。

trh <- c(-0.103200, 0.007022, 0.094090, 0.548600, Inf) 
colors <- c("#EDF8E9", "#BAE4B3", "#74C476", "#238B45") 

x <- runif(30, min = -0.103200, max = 1) 
xc <- cut(x, breaks = trh) 
colors[xc] 
+0

使用我提供的樣本數據,我應該如何使用您所提供的代碼? – 2014-09-29 15:45:08

相關問題