color scales和legends
??顏色的物理學基礎是:顏色是不同波長的光的混合物。人們能感受到不同顏色及其變化是因為人眼有不同的顏色受體。
??HCL color space是基于色的三個屬性的顏色空間。:色相,即紅綠藍黑白等顏色;
:色度,又叫色飽和度,表示顏色的鮮艷程度,越高越鮮艷,飽和度為0會變成灰色。想象將某種顏色的顏料和灰顏料摻在一起,灰色(消色)成分比例越大,色度越低,顏色越不鮮艷,反之,色度越高,顏色越鮮艷;
:亮度,顏色的明亮程度,不同色相之間的亮度是白色最亮,黃色比橙色量亮,橙色比紅色亮,紅色比黑色亮。同一色相的亮度,加白色會變量,加黑色會變暗,但不管加啥,飽和度都會降低(白加黑=灰,太亮的或太暗的飽和度都會降低,一般中間亮度的飽和度最高)。亮度的物理學基礎是顏色的反射,白色的反射率為100%,黑色的反射率為0%。
??患有色盲的人顏色受體較少,所以在為紅綠色盲的人設計調色板的時候可以盡量減少紅綠色的對比。
??對色盲人士友好的R包:dichromat、colorBlindness、viridis等等。
??colorBindness包中有一個很有用的可視化顏色的函數(shù):displayAllColors(),這個函數(shù)的Usage如下(代碼塊中的第二個函數(shù)):
# 可視化給定的顏色集合
displayColors(col, ...)
# 給定顏色集合,同時展示正常人眼中的顏色和對應的某種顏色視覺缺陷人眼中的大概顏色
displayAllColors(col, types = c("deuteranope", "protanope", "desaturate"), ...)
col: 想展示的顏色集合
...:geom_tile()使用的其他參數(shù)
types: 顏色視覺缺陷的類型
舉例說明:
colorBlindness::displayColors(rainbow(6))
colorBlindness::displayAllColors(rainbow(6))
# 只要給定顏色,displayColors()可以很方面地可視化出來
displayColors(c("red","black","yellow","blue"))
小知識:RGB顏色編碼
??R、G、B分別代表三原色Red、Green、Blue,其他顏色都可以用這三種顏色按照不同的比例混合而成。在計算機中,這三種顏色分別可以用一個8位二進制數(shù)來表示不同的比例,也就是說(你回到了人類的世界,所以要選擇對人類友好的十進制來說事情了)RGB顏色編碼可以用三個[0,255](十進制)之間的整數(shù)組合起來表示一種顏色,例如(255,0,0)表示紅色。便于使用,這個十進制數(shù)組合可以也用一個十六進制數(shù)表示,例如#FF0000也表示紅色。
| 顏色\三原色 | 三原色Red | 三原色Green | 三原色Blue | 結果 |
|---|---|---|---|---|
| 紅 | 二進制:11111111 十進制:255 十六進制:FF |
二進制:0 十進制:0 十六進制:0 |
二進制:0 十進制:0 十六進制:0 |
十進制:(255,0,0) 十六進制:#FF0000 |
| 綠 | 二進制:0 十進制:0 十六進制:0 |
二進制:11111111 十進制:255 十六進制:FF |
二進制:0 十進制:0 十六進制:0 |
十進制:(0,255,0) 十六進制:#00FF00 |
| 藍 | 二進制:0 十進制:0 十六進制:0 |
二進制:0 十進制:0 十六進制:0 |
二進制:11111111 十進制:255 十六進制:FF |
十進制:(0,0,255) 十六進制:#0000FF |
??PS:在R中,你可以用顏色的名字找到顏色,colors()可以列出657種R內置的可以識別的顏色名字;也可以用RGB編碼的十進制數(shù)組合或十六進制數(shù)找到顏色,例如R內置的一個小調色板palette()里用的就是十六進制表示的顏色,如下:
> palette()
[1] "black" "#DF536B" "#61D04F" "#2297E6"
[5] "#28E2E5" "#CD0BBC" "#F5C710" "gray62"
??從實用的角度,在R中,用顏色名字是對小白最友好的方式了,十進制組合表示起來略顯復雜,十六進制不管是用起來還是跟計算機交流起來都很好。了解下這幾種表示方式的轉換問題。
# 1. 給定十進制數(shù)字,轉換成十六進制表示
rgb(red, green, blue, alpha, names = NULL, maxColorValue = 1)
# 例如:
> rgb(red=255, green = 0, blue = 0,maxColorValue = 255)
[1] "#FF0000"
# 2. 給定顏色名字或十六進制數(shù)字,轉換成RGB顏色編碼
col2rgb(col, alpha = FALSE)
# 例如:
> col2rgb("red")
[,1]
red 255
green 0
blue 0
> col2rgb("#FF0000")
[,1]
red 255
green 0
blue 0