本文主要讲述R中的固定颜色选择函数、颜色生成函数、特定颜色主题调色板和RColorBrewer包的使用。
固定颜色函数
固定颜色选择函数也就是R提供的它自带固定种类的颜色,主要是函数包括colors()以及palette()。
colors()函数
通过colors()函数可以查看颜色的名字,默认有657种颜色。每种颜色对应的RGB值和16进制值可以在这里查看。这些颜色的调用有三种方法:
- 使用colors()函数返回的结果
- 颜色名字,即上面所显示的那么多种颜色
- 颜色编码(用6位16进制的字符串表示,前面加“#”号表示)
colors()
x <- seq(0, 2*pi, len = 51)
plot(x, sin(x), type = "o", pch = 21, col = colors()[552])
plot(x, sin(x), type = "o", pch = 21, col = 'red')
plot(x, sin(x), type = "o", pch = 21, col = '#FF0000')
palette()函数
palette()函数可以查看调色板中的颜色,其中第一种颜色是黑色,第二种颜色是红色。这个调色板共有8种颜色,当使用颜色数大于8时,会从头开始。
palette()
# [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow"
# [8] "gray"
当然,调色板当然是可以改变的。
palette(c("red","green","blue","yellow","cyan"))
此时,第二位可就不是红色了。通过再次将palette设置为”default”,可以得到默认调色板。
palette("default")
调色板的好处在于,我们可以在R中使用一个整数来表示颜色,而这个整数对应的颜色就是调色板中相应位置的颜色,比如在某作图函数中调用参数col = 2表示取调色板中第2种颜色。若整数值超过了调色板颜色向量的长度,那么R会自动取该整数除以调色板颜色向量长度的余数。
颜色生成函数
R提供了一系列利用颜色生成原理(如RGB模型(红绿蓝三原色混合)、HSV色彩模型(色调、饱和度和纯度)、HCL色彩模型(色调、色度和亮度)和灰色生成模型等)构造的颜色。这里只介绍RGB模型和灰色生成模型对应的rgb()和gray()函数。
rgb()函数
rgb(red, green, blue, alpha, names = NULL, maxColorValue = 1)
其中前四个参数都取值于区间[0,maxColorValue],maxColorValue默认值为1,我们也可以设置为255。nmes参数用来指定生成颜色向量的名称。这里前三个参数不用过多解释,值越大就说明那种颜色的成分越高;可能alpha我们不太熟悉,它指的是颜色的透明度,取0表示完全透明,取最大值表示完全不透明(默认),透明度在统计图形中有着重要地 位,因为它具有一个非常有用的性质—透明度可以叠加,即:两个或多个带有透明色的图形元素重叠在一起时,重叠部分的透明度会变小;这在某些统计图形中可以找到很好的应用,例如当散点图中点的数目过多而导致大量的点相互重叠时,我们可以使用透明色来看清图中的深层规律,其中一个直接的规律就是二维密度,点重叠越密集,则颜色越深(由于透明度的的叠加),该处的密度值也越大。
gray()函数
gray()生成灰色系列;只有一个参数level,表示灰度水平,取值在0到1之间,其中0表示纯黑色,而1表示纯白色;level取一个向量则可以生成一系列灰色值。
特定颜色主题调色板
特定颜色主题调色板都用一系列渐变的颜色表现了特定的主题,例如彩虹颜色系列、白热化颜色系列、地形颜色系列等等。
rainow()
rainbow() 是彩虹的颜色(“红橙黄绿青蓝紫”)来产生一系列颜色。rainbow()的参数n设定产生颜色的数目(n是我们主要的参数),参数s表示过饱和度,和参数gamma表示纯度,参数gamma表示伽玛校正,参数start和end设定彩虹颜色的一个子集,生成的颜色将从这个子集中选取,这个子集选取的大致分界线为:红色(red)为0,黄色(yellow)为1/6,绿色(green)为2/6,青色(cyan)为3/6,蓝色(blue)为4/6,红紫色(magenta)为5/6。
heat.colors()
heat.colors() 从红色渐变到黄色再变到白色(以体现“高温”、“白热化”)。
terrain.colors()
terrain.colors() 从绿色渐变到黄色再到棕色最后到白色(这些颜色适合表示地理地形)。
topo.colors()
topo.colors() 从蓝色渐变到青色再到黄色最后到棕色。
cm.colors()
cm.colors() 从青色渐变到白色再到粉红色。
pie(rep(1, times = 1000), labels = "", col = rainbow(1000), border = rainbow(1000))
pie(rep(1, times = 1000), labels = "", col = heat.colors(1000), border = heat.colors(1000))
pie(rep(1, times = 1000), labels = "", col = terrain.colors(1000), border = terrain.colors(1000))
pie(rep(1, times = 1000), labels = "", col = topo.colors(1000), border = topo.colors(1000))
pie(rep(1, times = 1000), labels = "", col = cm.colors(1000), border = cm.colors(1000))
RColorBrewer包
RColorBrewer包中颜色板被划分为序列型(sequential)、离散型(diverging)、分类型(qualitative)。序列型颜色板适用于从低到高排序明显的数据,浅色数字小,深色数字大。离散型颜色板适合带“正、负”的,对极值和中间值比较注重的数据。分类型颜色板比较适合区分分类型的数据。这三种基本能满足统计作图需要的类型,颜色都比较协调。RColorBrewer包中实际用到的就只有brewer.pal()函数。用户只需要指定调色板名称,就可以用包中的brewer.pal()函数生成颜色。
序列型(sequential)
序列型(sequential)共18组颜色,每组分为9个渐变颜色展示。使用渐变色往往能让图形看起来更美观,避免单调的颜色在图形中显得突兀。实现代码如下:
display.brewer.all(type = "seq")
以上代码展示的序列型(sequential)配色方案中各组颜色的名称和样式。如果想使用YlOrRd组的第3~8种颜色,则可用如下代码来实现。
barplot(rep(1,6),col=brewer.pal(9, "YlOrRd")[3:8])
从上例可知,可以使用brewer.pal(9, “某组渐变颜色的名称>”)来获取该组渐变色的全部9种颜色。
离散型(diverging)
离散型(diverging)共9组颜色,每组分为11个渐变颜色展示。其实现代码如下:
display.brewer.all(type = "div")
上述代码展示的离散型(diverging)配色方案中各组颜色的名称和样式。如果想使用BrBG组的第3~8种颜色,则可用如下代码来实现。
barplot(rep(1,6),col=brewer.pal(11, "BrBG")[3:8])
和序列型(sequential)渐变色的使用不同,由于离散型中每组颜色分为11个渐变颜色,因此brewer.pal函数第一个参数不再是9,而是11,即应使用brewer.pal (11, “某组渐变颜色的名称”)来读取该组渐变的11种颜色。
分类型(qualitative)
分类型(qualitative)共8组颜色,每组渐变颜色数也不尽相同。其实现代码如下:
display.brewer.all(type = "qual")
上述语句展示的分类型(qualitative)配色方案中各组颜色的名称和样式。通过brewer.pal (n, “某组渐变颜色的名称”)语句可以读取该组内的n个渐变色(其中n是该组内渐变色的数目)。
- - - - - -
参考文章
1.谢益辉《统计图形》