D3 颜色与插值
颜色
RGB
RGB 色彩模式 (RGB color mode
),是一种工业界的颜色标准,主要有红(R,Red)、绿(G,Green)、蓝(B,Blue)
三色,即RGB
,通过相互之间的叠加来取得各种各样的颜色
。RGB 主要覆盖了目前所有常用和人类肉眼可用的颜色,也是最为常用的颜色模式之一。
除此之外,RGB 的亮度各有 0~255
个亮度,通过他们三个通道的叠加可以组合出大约1678
万中颜色,通常也会被称之为1600
万色或千万色,还可以被称之为24位色
,在D3中他有如下方法:
ID | DA | FA |
---|---|---|
d3.rgb(r,g,b) | 分别输出 r\g\b 来创建颜色(范围都是0,255) |
|
d3.rgb(color ) |
通过输出相应的字符串来创建颜色: | |
RGB 十进制 |
rgb(255, 255, 255) | |
RGB 十六进制 |
#ff0d0d | |
RGB 十六进制 缩写 |
#ff0 | |
HSL 十进制 |
hsl(120, 0.5, 0.5) | |
颜色名称 |
red | |
rgb.brighter() | 使得颜色变得更加明亮 | RGB的各个通道 x 0.7 ^ -k(如果 k 没有,那么k 的值就为1 ),需要注意的是只有当某通道的值的范围在 30~255 之间时,才会进行相应的计算 |
rgb.darker() | 颜色变得更加黯淡 | RGB各个值 x 0.7 ^ k |
rgb.hsl() | 返回该颜色对应的 HSL 值 |
|
rgb.toString() | 以字符串的形式返回颜色值 #ffffff |
|
brighter() |
darker() |
返回一个新的颜色对象,当前对象并不会进行改变 |
hsl() | 返回当前颜色所对应的 HSL 值 |
方法
1 | var color = d3.rgb(166,12,12); |
在上述的 code中,我们可以通过使用has()
来返回 color
的has
颜色值,也可以通过使用toString()
来返回该颜色的十六进制
,darker()与brighter()
数值为2
即亮度为2
,暗度为2
的颜色变值
。
HSL
HSL 与 RGB 的区别就是,他是通过将 RGB 色彩模式
内的各个组成颜色放在圆柱坐标系的表示方法。这种表示方法会比基于笛卡尔坐标系
的集合结构中的RGB更加直观。
HSL 颜色空间主要通过色相(H,Hue)、饱和度(S,Saturation)、亮度(L,Lightness)
三个相互叠加来得到各种颜色,他的色相范围是0°~360°
,饱和度和亮度分别为0~1
。其中色相°是一个角度,每个角度
都可以代表其中的一个颜色
,例如0°
代表红色,120°
代表绿色,240°
代表蓝色。
通常的情况下,饱和度越大,颜色就越鲜艳,而亮度值主要控制色彩的明暗变化
,当亮度越大,就越接近与白色,反之值越小就越接近黑色,默认的情况下RGB与HSL的颜色是可以互相转换的。
方法
ID | DA |
---|---|
d3.hsl(h,s,l ) |
根据h、s、l 值来创建HAL颜色 |
d3.hsl(color ) |
根据字符串来创建HSL 颜色 |
hsl.brighter() | 使得颜色变得更亮 |
hsl.darker() | 使得颜色变得更暗 |
hsl.rgb() | 返回对应的rgb 颜色 |
hsl.toString | 返回以RGB 字符串十六进制形式输出的颜色 |
1 | var rgb = d3.rgb(166,12,12) |
插值
插值(Interpolation
)主要用于计算介于
两个颜色之间的颜色,主要可以通过使用d3.interpolateRgb()
来处理RGB
颜色之间的插值运算。而如果是HSL
颜色则可以通过使用d3.interpolateHsl()
来处理HSL
颜色之间的插值运算。除此之外,D3 还提供了一种更加智能
的方法即:d3.interpolate()
,他会自动的判断颜色类型,还可以处理字符串之间的差值。
1 | var ragOne = d3.rgb(255,0,0) |
在上述的 code 中,ragOne
与ragTwo
的插值通过interpolate
来自动判断颜色类型,并根据设置的插值
进行计算,当插值为0
时返回了#ff0000
颜色,而当插值为0.5
时,则返回了#808080
颜色。