我想要一张如图所示的色标:
所以从头到尾我们都有:
非常亮的黄色(白色),橙色,红色,黑色,蓝色,浅蓝色到非常亮的蓝色(白色)
我希望值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)
答案 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))