ggplot2: barplot с цветами в зависимости от значения оси y

у меня есть этот простой код (data + barplot):

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, то есть я хотел бы, чтобы цвет в каждом баре был функцией высоты (некоторый класс от Красного для mimimum y до зеленого для максимального y).

как я могу это сделать, пожалуйста?

1 ответов


вы в основном там с вашим текущим кодом. Просто добавьте функцию 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 заботиться о градиенте, работает довольно хорошо

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