2014-09-29 2 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

Используя данные примера я предоставил, как я должен использовать код, который вы указали? –

Смежные вопросы