让我们说,我使用以下内容构建散点图:
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")
有没有办法让十六进制颜色代码与任意值(属于现有值的范围)相关联?换句话说,如何从0获得#ffff00
(黄色),或者0.2的颜色是什么?
答案 0 :(得分:7)
我不知道这是多么稳定或可靠(甚至是正确的),但潜入规模物体的内容会发现一些事情:
> scg = scale_colour_gradient2(low = "red", high = "blue", mid = "yellow")
创建一个缩放对象。你可以调用各种方法。默认情况下,它会将值从-1缩放到1(或者可能是0到1),因此您必须将其重置为数据:
> scg$train(d$val)
然后你可以这样做:
> scg$map(0.2)
[1] "#FAF03B"
注意,这个比例是以零为中心的,所以红色是-max而不是min,因为-max<分:
> scg$map(c(-max(d$val),min(d$val),0,max(d$val)))
[1] "#FF0000" "#FF4600" "#FFFF00" "#0000FF"
这是否与图表上的颜色一致?