R语言基础图形元素--颜色
简介
任何一幅统计图形都是由基础的图形元素组成的,包括了颜色,点,线,以及多边形等。每一幅精美的图形都不离不开这些基础的图形元素。R语言提供了诸多函数,为图形添加点,线,颜色等。这里主要对R语言中基础的颜色选择函数进行介绍。
R中关于颜色的基础函数
在默认情况下,grDevices 包为R语言的颜色设置提供了支撑,它提供了大量的颜色选择函数和生成函数,用以实现不同的配色方案。参考谢益辉《现代统计图形》,将grDevices 包中的所有关于颜色的函数分为三类,分别是:固定颜色选择函数、颜色生成和转换函数、特定颜色主题调色板。
1. 固定颜色选择函数
顾名思义,固定颜色选择函数也就是R中自带的固定种类颜色,主要是colors()
和palette()
函数。
1.1 colors()
函数
colors()
、colours()
是一样的。
运行这两个函数,将会产生657种颜色名称,如yellow(黄色),beige(米色)等。
colors()
# sample()随机抽样函数
sample(colors(), 10)
# [1] "grey92" "lightskyblue" "lemonchiffon4" "coral1"
# [5] "peachpuff3" "darkorchid4" "grey11" "gray43"
#[9] "gray87" "salmon3"
# 通过以下函数,可以观看657种颜色,并生成PDF文件
pdf("colors.pdf", height = 120)
par(mar = c(0, 10, 3, 0) + 0.1, yaxs = "i")
barplot(rep(1, length(colors())),
col = rev(colors()), names.arg = rev(colors()), horiz = TRUE,
las = 1, xaxt = "n", main = expression("Bars of colors in" ~ italic(colors()))
)
dev.off()
1.2 palette()
函数
palette就是调色板的意思,这么说也就很容易理解了,这个函数用来设置调色板或者获得调色板颜色值,如果不加任何参数,则返回默认值。
palette() # 默认的调色板颜色
# [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow"
# [8] "gray"
palette(colors()[1:20]) # 重新设置调色板为 colors() 的前 20种颜色
palette() # 更改后的调色板颜色
# [1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
# [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
# [9] "aquamarine" "aquamarine2" "aquamarine3" "aquamarine4"
# [13] "azure" "azure" "azure2" "azure3"
# [17] "azure4" "beige" "bisque" "bisque"
palette("default") # 恢复默认调色板
此外,我们可以通过整数来调用某种颜色,例如,col=2代表colors()函数中的第二个元素。若整数值超过了调色板颜色向量的长度,那么 R 会自动取该整数除以调色板颜色向量长度的余数。
2. 颜色生成和转换函数
R 提供了一系列利用颜色生成模型如 RGB 模型(红绿蓝三原色混合)、HSV 色彩模型(色调、饱和度和纯度)、HCL 色彩模型(色调、色度和亮度)等。
2.1 rgb()
函数
红绿蓝三原色混合,用法为 rgb(red, green, blue, alpha, names = NULL, maxColorValue = 1)
;其中前四个参数都取值于区间 [0, maxColorValue],names 参数用来指定生成颜色向量的名称。alpha参数用来指定颜色透明度,0代表完全透明,1代表完全不透明。例如,可以通过此参数设定散点图的相关颜色,使展示的内容更加完全。
rgb(0, 1, 0)
# [1] "#00FF00"
可以看出,颜色是由六个十六进制的数字组成。
2.2 hsv()
函数
用色调(Hue)、饱和度(Saturation)和纯度(Value)来构造颜色,用法 hsv(h = 1, s = 1, v = 1, alpha)
,取值为[0,1]。
hsv(.5,.5,.5)
# [1] "#408080"
2.3 gray(), grey()
函数
生成灰色系列;只有一个参数 level,表示灰度水平,取值在 0 到 1 之间,其中 0 表示纯黑色,而 1 表示纯白色;level 取一个向量则可以生成一系列灰色值。
gray(seq(0, 1, length = 5))
# [1] "#000000" "#404040" "#808080" "#BFBFBF" "#FFFFFF"
图片仅为展示颜色搭配方案。
2.4 rgb2hsv()
函数
将 RGB 颜色转换为 HSV 颜色,用法 rgb2hsv(r, g = NULL, b = NULL, maxColorValue = 255)
。请看以下例子:
# 赋值给变量 rgb.mat
(rgb.mat <- matrix(c(255, 0, 0, 0, 255, 0, 0, 0, 255, 10, 100, 200), nrow = 3))
# [,1] [,2] [,3] [,4]
# [1,] 255 0 0 10
# [2,] 0 255 0 100
# [3,] 0 0 255 200
rgb2hsv(rgb.mat)
# [,1] [,2] [,3] [,4]
# h 0 0.3333333 0.6666667 0.5877193
# s 1 1.0000000 1.0000000 0.9500000
# v 1 1.0000000 1.0000000 0.7843137
2.5 col2rgb()
函数
将任意一种 R 颜色值转换为 RGB 表示,用法 col2rgb(col, alpha = FALSE)
。
col2rgb(4) # 调色板中第 4 种颜色默认是蓝色
# [,1]
# red 19
# green 165
# blue 253
col2rgb("yellow") # 黄色是由红绿混合得到的
# [,1]
# red 255
# green 255
# blue 0
3. 特定颜色主题调色板
个人认为,前面的颜色方案可能不适合于非专业人士的使用(仅为个人看法),这一部分主要介绍几个特定的颜色主题调色板。
3.1 rainbow()
函数
就是用彩虹的颜色(“红橙黄绿青蓝紫”)来产生一系列颜色,用法 rainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n)
;参数 n 设定产生颜色的数目;参数 start 和 end 设定彩虹颜色的一个子集,生成的颜色将从这个子集中选取。
par(mfrow = c(2, 2))
pie(rep(1, 12), col = rainbow(12), main = "RGB/HSV")
3.2 heat.colors()
函数
从红色渐变到黄色再变到白色。
3.3 terrain.colors()
函数
从绿色渐变到黄色再到棕色最后到白色。
此外,还有诸多特定颜色主题调色板相关函数有待探索。
这里再介绍一个附加包RColorBrewer,可以用包中的brewer.pal()
函数生成颜色。
library(RColorBrewer)
brewer.pal(9, "Blues")
# [1] "#F7FBFF" "#DEEBF7" "#C6DBEF" "#9ECAE1" "#6BAED6" "#4292C6" "#2171B5"
# [8] "#08519C" "#08306B"
# 查看RColorBrewer包所有配色方案
display.brewer.all(type="all")
4. 渐变色的简单原理及应用
xx <- c(1912, 1912:1971, 1971)
yy <- c(min(nhtemp), nhtemp, min(nhtemp))
plot(xx, yy, type = "n", xlab = "Year", ylab = "Temperatures")
for (i in seq(255, 0, -3)) {
yy <- c(45, nhtemp - (nhtemp - min(nhtemp)) * (1 - i / 255), 45) # rgb() 中的绿色成分逐渐变小
polygon(xx, yy, col = rgb(1, i / 255, 0), border = NA)
# 可以在这里加上 Sys.sleep(0.05) 以便看清作图过程
}
box() # 补齐边框
此图展示的是1912~1971年New Haven 地区的年均气温。
最后,漂亮、适宜的统计图形总是受人欢迎的,颜色搭配对于绘图的重要性不言而喻。
- ##侵权请联系作者删除!
参考书籍
[1] 现代统计图形