ggplot - 加热调色板

时间:2017-07-10 11:43:18

标签: r ggplot2

我想要一张如图所示的色标:

enter image description here

所以从头到尾我们都有:

非常亮的黄色(白色),橙色,红色,黑色,蓝色,浅蓝色到非常亮的蓝色(白色)

我希望值0始终显示为“黑色”。最小(负)值应该是“极亮蓝”。最大的价值(积极的)应该是“极端明亮的yelllow”。

请注意,最小值和最大值与原点0的距离不同。

多数民众赞成在哪里:

library(ggplot2)
df <- data.frame(xDim = c(0, 1, 2, 0, 1, 2, 0, 1, 2), yDim = c(2, 2, 2, 1, 1, 1, 0, 0, 0), high = c(0, -1, 6, -3, 8, 5, -2, 7, 5))

ggplot(df, aes(xDim, yDim)) +
    geom_raster(aes(fill = high)) +
    scale_fill_gradient2(low = "blue", mid = "black", high = "red", midpoint = 0)

1 个答案:

答案 0 :(得分:1)

scale_fill_gradientn最适合这个。您只需要获得适当的颜色矢量,然后为这些颜色提供一系列值。

在您的情况下,我们可以选择颜色:

col <- c('yellow', 'orange', 'red', 'black', 'blue', 'skyblue', 'white')

和值:

val <- c(seq(min(df$high), 0, length.out = 4), seq(0, max(df$high), length.out = 4)[-1])

我们需要根据文档使用rescale,所以我们这样做:

p <- ggplot(df, aes(xDim, yDim)) +
  geom_raster(aes(fill = high)) +
  scale_fill_gradientn(colours = col, values = scales::rescale(val))

cowplot::ggdraw() + cowplot::draw_plot(cowplot::get_legend(p))

enter image description here