grDevices | R语言中的配色方法汇总(Ⅱ-2)
上篇主要介绍了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()
函数中,固定h
和v
参数(默认值均为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()
函数中,固定h
和s
参数(默认值均为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)相关推荐
- grDevices | R语言中的配色方法汇总(Ⅱ-1)
前篇介绍的RColorBrewer包是R常用的配色拓展包,而R系统自带的配色方案则由grDevices工具包提供. 由于grDevices工具包中的配色函数较多,我们分多篇推文进行介绍,本篇介绍的函数 ...
- RColorBrewer | R语言中的配色方法汇总(Ⅰ)
1 RColorBrewer工具包 该包是R中常用的颜色选取工具包,它具有简单易用的特点,对于不具备太多色彩理论的读者来说也十分友好.虽然该包主要是为地图上色而设计,但也可以用于其他用途. libra ...
- r语言算巢式设计方差分析_R语言中的方差分析方法汇总
方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...
- R语言中dim函数_R语言中的方差分析方法汇总
方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...
- R语言中的抽样方法与描述统计函数
抽样方法 常见的抽样方法 简单随机抽样 分层抽样 系统抽样 # 导入数据 # 1 金融 2 建筑 3 外语 data <- read.csv("E:\\Github\\code-lea ...
- r语言中正定矩阵由于误差不正定_R语言之数据处理(一)
在上一篇小文中,提到了关于R语言导入数据的一些方法,之后的重点就转向了数据的处理上.数据处理其实在整个数据分析项目中所占用的时间是比较多的,所以根据处理的目的不同,也有不同的处理方法.在R语言中,我通 ...
- raster | R语言中的空间栅格对象及其基本处理方法(Ⅰ)
前面的系列推文已经完成了对R语言中的两个管理空间矢量数据的工具包(sf和sp)的介绍,以及空间自相关.空间插值等空间分析方法. 这里小编再推出一个系列来介绍R语言中管理空间栅格数据的工具包:raste ...
- R语言中读取xlsx文件的方法
R语言中读取xlsx文件的方法 安装包 install.packages("openxlsx") library(openxlsx) 文件名+sheet的序号 data<- ...
- R语言中的基础作图和ggplot2配色系统
文章目录 颜色代码大全 R语言中的调色板 RColorBrewer提供的调色盘 R语言中配色介绍 R语言中自带的调色板 RColorBrewer包提供更多的调色板 ggplot2中配色系统的介绍 数值 ...
最新文章
- Django web框架-----Django连接现有mysql数据库
- python下拉菜单_python-web自动化:下拉列表操作
- VS中的C#项目怎样引入另一个项目
- 粒子滤波实现物体跟踪
- oracle死锁解决常用方法(屡试不爽)
- 软件工程生命周期模型_软件生命周期模型比较| 软件工程
- 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
- Opencv笔记(十八)——轮廓的更多函数及其层次结构
- [linux]CentOS安装pre-built Nginx
- Android工具栏中心标题和自定义字体
- 基于SDN的环路通信
- vue-13-swiper组件的使用
- 章草、今草、狂草是草书的三种书写表现方式,你更喜欢哪一种?
- Python 计时器倒计时弹窗提醒
- wordpress媒体库增加分类和标签
- 苹果pencil有必要买吗?强烈推荐几款苹果平替笔
- 【微信开发】定制消息推送
- CodeForces 711C Coloring Trees (三维DP)
- github clone 代码到本地全步骤
- 基于Java的XML编辑器:Oxygen XML Editor Mac中文版
热门文章
- 腾讯云认证考试常见问题答疑
- Nginx学习总结(8)——Nginx服务器详解
- Maven学习总结(39)——Maven私服的搭建及使用deploy命令部署构建问题汇总
- Linux学习总结(22)——CentOS7.2安装Nginx
- eclipse如何运行html文件,eclipse中applet嵌入html文件
- 材料凝固计算机模拟,颗粒增强金属基复合材料凝固过程的计算机模拟_谢国宏.pdf...
- 猫哥教你写爬虫 004--数据类型转换-小练习
- NetScreen下“区域”与“路由”、“策略”基本概念
- 继iptables之后的新一代包过滤框架是nftables
- 《中国人工智能学会通讯》——5.4 结 论