上篇主要介绍了RGB模型和灰度模型两种配色方案,本篇来继续介绍HSV模型和HCL模型。

根据色彩理论,色彩具有三要素,即色相、饱和度和明度,HSV模型和HCL模型均是基于该理论的配色方案。

同上篇一样,本篇涉及的函数也都来自grDevices工具包,具体如下:

  • hsv()

  • rgb2hsv()

  • hcl()

  • hcl.color()

  • hcl.pals()

hsv()

hsv()函数是根据HSV颜色模型生成颜色的,语法结构如下:

hsv(h = 1, s = 1, v = 1, alpha)
  • h:色调或色相(hue);

  • s:饱和度或纯度(saturation);

  • v:明度(value);

  • aplha:透明度,同rgb()函数。

  • hsv()函数的四个参数取值范围均是[0,1]。

下面我们通过具体例子,来直观感受三要素的作用效果。

色相(H)

在色彩理论中,一般使用[0, 360]之间的角度来表示色相,这样就可以形成一个色相环,但是R的hsv()函数的色相参数h的取值范围为[0,1],在使用时需要进行等比转换。

在色相环中,三原色红、绿、蓝分别占据0、120、240度角,将色相环三等分。相应地,在hsv()中,三原色对应的h参数分别为0、1/3、2/3。

par(plt = c(0,1,0,1))
pie(rep(1,3), init.angle = 90,labels = "", border = NA,col = hsv(h = seq(0, 1, 1/3)))

在色相环中,

  • 补色:角度相差180度的色相互为补色,直观地看,即色相环直径的两个端点。相应地,在hsv()中,互补色的h参数相差1/2。在光学中,互补色以一定比例混合可以形成白光;

  • 邻近色:角度相差0-60度的色相为邻近色。邻近色的色相彼此近似,冷暖性质一致,色调统一和谐、感情特性一致(来自百度百科);

  • 对比色:角度相差120-180度的色相为对比色。对比色彼此区分明显。

par(plt = c(0,1,0,1),mfrow  = c(1,2))
pie(rep(1,6), init.angle = 90,labels = "", border = NA,col = hsv(h = seq(0, 1, 1/6)))pie(rep(1,24), init.angle = 90,labels = "", border = NA,col = hsv(h = seq(0, 1, 1/24)))

在R中,通过将上面的饼图无限分割,可以自制一个色相环:

par(plt = c(0,1,0,1))
pie(rep(1,1000), init.angle = 90,labels = "", border = NA,col = hsv(h = seq(0, 1, 1/1000)))

饱和度(S)

前篇介绍过,RGB模型在黑白打印时不太适用,而是需要使用灰度模型。而在HSV模型中,颜色的不同饱和度在黑白打印时会区分成不同的灰度。因此HSV模型生成的颜色在彩印和黑白打印下都可以相互区分。

减小饱和度,相当于是往颜色中加入白色;饱和度也称为纯度。

以红色为例,在hsv()函数中,固定hv参数(默认值均为1),使饱和度参数s从0到1进行变化,效果如下:

par(plt = c(0,1,0,1))
pie(rep(1,1000), init.angle = 90,labels = "", border = NA,col = hsv(s = seq(0, 1, 1/1000)))

  • 上图即使在黑白打印时,也能很好区分。

明度(V)

前面几幅图观看起来可能会有些不适,原因在于它们太亮了,即明度太高。

减小明度,相当于往颜色中增加黑色。

同样以红色为例,在hsv()函数中,固定hs参数(默认值均为1),使明度参数v从0到1进行变化,效果如下:

par(plt = c(0,1,0,1))
pie(rep(1,1000), init.angle = 90,labels = "", border = NA,col = hsv(v = seq(0, 1, 1/1000)))

  • 可以发现,上图没有前面几幅图那么刺眼;

可视化技巧:在配色时,点状要素一般选择明度较高的颜色,面状要素应选择明度较低的颜色。

par(plt = c(0.15, 0.9, 0.15, 0.95),mfrow = c(1,2))
# 面要素明度高,点要素明度低
plot(factor(iris$Species), iris$Sepal.Length,col = hsv(0.5, 0.9, 1))
points(jitter(c(iris$Species)), iris$Sepal.Length,pch = 21,bg = hsv(0.2, 1, 0.6))
# 面要素明度低,点要素明度高
plot(factor(iris$Species), iris$Sepal.Length,col = hsv(0.5, 0.9, 0.6))
points(jitter(c(iris$Species)), iris$Sepal.Length,pch = 21,bg = hsv(0.2, 1, 1))

rgb2hsv()

颜色的RGB编码和HSV编码是可以相互转换的,rgb2hsv()函数提供了将RGB编码转为对应HSV编码的方法。语法结构如下:

rgb2hsv(r, g = NULL, b = NULL,maxColorValue = 255)

示例:

hsv(0.5, 0.9, 0.6)
## [1] "#0F9999"col2rgb("#0F9999")
##       [,1]
## red     15
## green  153
## blue   153rgb2hsv(15, 153, 153)
##        [,1]
## h 0.5000000
## s 0.9019608
## v 0.6000000
  • 对于同一颜色,HSV编码要比RGB编码更易理解。

hcl()

hcl()函数是基于HCL颜色模型生成颜色的,它的三个字母分别表示色相(HUe)、饱和度(Chroma)、亮度(Luminance)。

可以看出,HCL模型和HSV模型的参数意义基本类似,但在定义上有略微区别。按照R的官方文档的说法,HCL模型比HSV模型更符合人的视觉感受。

hcl(h = 0, c = 35, l = 85,alpha, fixup = TRUE)
  • h:色相参数,意义同hsv()函数,但它的取值范围是[0, 360]之间的角度;

  • c:饱和度参数,类似hsv()函数的s参数,但它的取值范围不固定;

  • l:亮度参数,类似hsv()函数的v参数,取值范围为[0, 100]。

在R中,使用HCL模型生成颜色的常用函数实际上是hcl.colors(),因此这里就不再对hcl()函数进行介绍了。

hcl.colors()

hcl.colors()函数的语法结构和功能与grey.colors()函数类似,即快速生成一组HCL编码的颜色:

hcl.colors(n, palette = "viridis", alpha = NULL,rev = FALSE, fixup = TRUE)

不同之处是,hcl.colors()函数拥有一个palette参数,它指定了彩色调色板的名称,默认调色板为viridis

image(x = 1:5, y = 1, z = matrix(1:5, ncol = 1),col = hcl.colors(5),axes = F, ann = F)

所有配色板的名称可以通过hcl.pals()函数进行查询。

hcl.pals()

前面介绍的RColorBrewer工具包(可点击跳转),其颜色系列分为sequential、qualitative、diverging三类,而hcl.pals()函数也同样如此,除此之外,还有一个divergingx类型。语法结构如下:

hcl.pals(type = NULL)
  • type:调色板类型。

hcl.pals("qualitative")
## [1] "Pastel 1" "Dark 2"   "Dark 3"   "Set 2"    "Set 3"    "Warm"     "Cold"
## [8] "Harmonic" "Dynamic"hcl.pals("sequential")
##  [1] "Grays"         "Light Grays"   "Blues 2"       "Blues 3"
##  [5] "Purples 2"     "Purples 3"     "Reds 2"        "Reds 3"
##  [9] "Greens 2"      "Greens 3"      "Oslo"          "Purple-Blue"
## [13] "Red-Purple"    "Red-Blue"      "Purple-Orange" "Purple-Yellow"
## [17] "Blue-Yellow"   "Green-Yellow"  "Red-Yellow"    "Heat"
## [21] "Heat 2"        "Terrain"       "Terrain 2"     "Viridis"
## [25] "Plasma"        "Inferno"       "Dark Mint"     "Mint"
## [29] "BluGrn"        "Teal"          "TealGrn"       "Emrld"
## [33] "BluYl"         "ag_GrnYl"      "Peach"         "PinkYl"
## [37] "Burg"          "BurgYl"        "RedOr"         "OrYel"
## [41] "Purp"          "PurpOr"        "Sunset"        "Magenta"
## [45] "SunsetDark"    "ag_Sunset"     "BrwnYl"        "YlOrRd"
## [49] "YlOrBr"        "OrRd"          "Oranges"       "YlGn"
## [53] "YlGnBu"        "Reds"          "RdPu"          "PuRd"
## [57] "Purples"       "PuBuGn"        "PuBu"          "Greens"
## [61] "BuGn"          "GnBu"          "BuPu"          "Blues"
## [65] "Lajolla"       "Turku"hcl.pals("diverging")
##  [1] "Blue-Red"      "Blue-Red 2"    "Blue-Red 3"    "Red-Green"
##  [5] "Purple-Green"  "Purple-Brown"  "Green-Brown"   "Blue-Yellow 2"
##  [9] "Blue-Yellow 3" "Green-Orange"  "Cyan-Magenta"  "Tropic"
## [13] "Broc"          "Cork"          "Vik"           "Berlin"
## [17] "Lisbon"        "Tofino"hcl.pals("divergingx")
##  [1] "ArmyRose" "Earth"    "Fall"     "Geyser"   "TealRose" "Temps"
##  [7] "PuOr"     "RdBu"     "RdGy"     "PiYG"     "PRGn"     "BrBG"
## [13] "RdYlBu"   "RdYlGn"   "Spectral" "Zissou 1" "Cividis"
  • hcl.pals()函数中共有110种调色板,远远多于RColorBrewer工具包;

  • 可以发现,RColorBrewer工具包中的颜色系列名称也可以在hcl.pals()函数中找到。

image(x = 1:12, y = 1, z = matrix(1:12, ncol = 1),col = hcl.colors(12, palette = "Reds"),axes = F, ann = F)

  • 使用hcl.colors()函数调用调色板生成颜色是没有数量限制的,而RColorBrewer工具包的颜色系列所包含的颜色都具有上限。

col <- hcl.colors(5, palette = "Reds")
rgbcode <- col2rgb(col)
rgb2hsv(rgbcode)
##       [,1]      [,2]       [,3]       [,4]       [,5]
## h 0.941896 0.9737828 0.02291667 0.04065041 0.05000000
## s 1.000000 0.8725490 0.62745098 0.32156863 0.03968254
## v 0.427451 0.8000000 1.00000000 1.00000000 0.98823529
  • 可以看出,使用hcl.colors()函数生成的颜色的色相、饱和度和亮度均有一定的区别,因此可以用于彩色和黑白印刷,而无需额外的调整。

grDevices | R语言中的配色方法汇总(Ⅱ-2)相关推荐

  1. grDevices | R语言中的配色方法汇总(Ⅱ-1)

    前篇介绍的RColorBrewer包是R常用的配色拓展包,而R系统自带的配色方案则由grDevices工具包提供. 由于grDevices工具包中的配色函数较多,我们分多篇推文进行介绍,本篇介绍的函数 ...

  2. RColorBrewer | R语言中的配色方法汇总(Ⅰ)

    1 RColorBrewer工具包 该包是R中常用的颜色选取工具包,它具有简单易用的特点,对于不具备太多色彩理论的读者来说也十分友好.虽然该包主要是为地图上色而设计,但也可以用于其他用途. libra ...

  3. r语言算巢式设计方差分析_R语言中的方差分析方法汇总

    方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...

  4. R语言中dim函数_R语言中的方差分析方法汇总

    方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...

  5. R语言中的抽样方法与描述统计函数

    抽样方法 常见的抽样方法 简单随机抽样 分层抽样 系统抽样 # 导入数据 # 1 金融 2 建筑 3 外语 data <- read.csv("E:\\Github\\code-lea ...

  6. r语言中正定矩阵由于误差不正定_R语言之数据处理(一)

    在上一篇小文中,提到了关于R语言导入数据的一些方法,之后的重点就转向了数据的处理上.数据处理其实在整个数据分析项目中所占用的时间是比较多的,所以根据处理的目的不同,也有不同的处理方法.在R语言中,我通 ...

  7. raster | R语言中的空间栅格对象及其基本处理方法(Ⅰ)

    前面的系列推文已经完成了对R语言中的两个管理空间矢量数据的工具包(sf和sp)的介绍,以及空间自相关.空间插值等空间分析方法. 这里小编再推出一个系列来介绍R语言中管理空间栅格数据的工具包:raste ...

  8. R语言中读取xlsx文件的方法

    R语言中读取xlsx文件的方法 安装包 install.packages("openxlsx") library(openxlsx) 文件名+sheet的序号 data<- ...

  9. R语言中的基础作图和ggplot2配色系统

    文章目录 颜色代码大全 R语言中的调色板 RColorBrewer提供的调色盘 R语言中配色介绍 R语言中自带的调色板 RColorBrewer包提供更多的调色板 ggplot2中配色系统的介绍 数值 ...

最新文章

  1. Django web框架-----Django连接现有mysql数据库
  2. python下拉菜单_python-web自动化:下拉列表操作
  3. VS中的C#项目怎样引入另一个项目
  4. 粒子滤波实现物体跟踪
  5. oracle死锁解决常用方法(屡试不爽)
  6. 软件工程生命周期模型_软件生命周期模型比较| 软件工程
  7. 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
  8. Opencv笔记(十八)——轮廓的更多函数及其层次结构
  9. [linux]CentOS安装pre-built Nginx
  10. Android工具栏中心标题和自定义字体
  11. 基于SDN的环路通信
  12. vue-13-swiper组件的使用
  13. 章草、今草、狂草是草书的三种书写表现方式,你更喜欢哪一种?
  14. Python 计时器倒计时弹窗提醒
  15. wordpress媒体库增加分类和标签
  16. 苹果pencil有必要买吗?强烈推荐几款苹果平替笔
  17. 【微信开发】定制消息推送
  18. CodeForces 711C Coloring Trees (三维DP)
  19. github clone 代码到本地全步骤
  20. 基于Java的XML编辑器:Oxygen XML Editor Mac中文版

热门文章

  1. 腾讯云认证考试常见问题答疑
  2. Nginx学习总结(8)——Nginx服务器详解
  3. Maven学习总结(39)——Maven私服的搭建及使用deploy命令部署构建问题汇总
  4. Linux学习总结(22)——CentOS7.2安装Nginx
  5. eclipse如何运行html文件,eclipse中applet嵌入html文件
  6. 材料凝固计算机模拟,颗粒增强金属基复合材料凝固过程的计算机模拟_谢国宏.pdf...
  7. 猫哥教你写爬虫 004--数据类型转换-小练习
  8. NetScreen下“区域”与“路由”、“策略”基本概念
  9. 继iptables之后的新一代包过滤框架是nftables
  10. 《中国人工智能学会通讯》——5.4 结 论