使用ggplot2,如何从价值中获取颜色?

sin*_*eso 3 r ggplot2

比方说,我正在使用以下内容构建散点图:

library(tidyverse)
data_frame(x = rnorm(500), y = rnorm(500), val = rnorm(500)) %>%
    ggplot(aes(x, y, colour = val)) +
    geom_point() +
    scale_colour_gradient2(low = "red", high = "blue", mid = "yellow")
Run Code Online (Sandbox Code Playgroud)

有没有办法让十六进制颜色代码与任意值(属于现有值的范围)相关联?换句话说,如何#ffff00从0 获得(黄色),或者0.2的颜色是什么?

Spa*_*man 7

我不知道这是多么稳定或可靠(甚至是正确的),但潜入规模对象的内容会揭示一些事情:

> scg = scale_colour_gradient2(low = "red", high = "blue", mid = "yellow")
Run Code Online (Sandbox Code Playgroud)

这会创建一个比例对象.你可以调用各种方法.默认情况下,它会将值从-1缩放到1(或者可能是0到1),因此您必须将其重置为数据:

> scg$train(d$val)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

> scg$map(0.2)
[1] "#FAF03B"
Run Code Online (Sandbox Code Playgroud)

注意这个比例是以零为中心的,所以红色是-max而不是min,因为-max <min:

> scg$map(c(-max(d$val),min(d$val),0,max(d$val)))
[1] "#FF0000" "#FF4600" "#FFFF00" "#0000FF"
Run Code Online (Sandbox Code Playgroud)

这是否与图表上的颜色一致?