2017-09-04 42 views
3

比方說,我使用的是建立一個散點圖如下:使用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") 

是否有一種方式來獲得一個任意值(現有值的範圍內的下降)相關的十六進制顏色代碼?換句話說,如何從0得到#ffff00(黃色),或0.2是什麼顏色?

回答

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而非分鐘因爲-max <分鐘:

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

這是否與在曲線圖上的顏色一致?