R中的颜色设置

本文主要讲述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.谢益辉《统计图形》

2.R语言中的色彩和调色板

3.4.RColorBrewer颜色扩展包

Previous     Next Xu Kuang /
Published under (CC) BY-NC-SA in categories 技术篇  tagged with R