查看原文
其他

R预设配色系统及自定义色板

2017-06-10 杜雨 R语言中文社区

 作者:杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。
个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。 

关于配色的话题,已经聊过很多次了,但是就像是之前说过的,对于图形可视化而言,配色决定着作品的“颜值”,谈再多次都不嫌多。

今天是R语言配色系统综合篇的上篇(当然是有下篇啦,下篇将会教你如何优雅的提取各种高大上配色主题,作为己用。经过几天的研究,小魔方已经发现了如果将各种高质量配色包中的主题色板通过函数的形式在高级绘图系统和低级绘图系统之间相互共享)。


今天的内容主要包含两部分:

  • R预置色彩系统的色板

  • R语言自定义颜色调用


其实在R语言的色彩系统中,有两大类颜色系统,一类是预设的调色盘,通过调色盘,你可以获取任意数量的色彩组合。


R语言的预设调色板一共有五个:

rainbow

heat.colors

terrain.colors

topo.colors

cm.colors

这五个调色板就像是一个大染缸一样,排列着无数的色彩组合。取色也很简单,就是使用预设色盘名称+色彩数据即可:

rainbow(10)

 [1] "#FF0000FF" "#FF9900FF" "#CCFF00FF" "#33FF00FF" "#00FF66FF" "#00FFFFFF"

 [7] "#0066FFFF" "#3300FFFF" "#CC00FFFF" "#FF0099FF"

以上既是通过名称+数量的方式获取的一组10个颜色,同样我们可以通过scales包中show_col函数查看具体的颜色效果:

library(scales)

show_col(rainbow(10),labels=T)#labels控制是否显示HEX格式的色值信息


接下来我用一个版面矩阵将五个色盘颜色全部显示出来:

par(mfrow=c(1,5),mar=c(0.5,0.5,2,0.5),xaxs="i",yaxs="i")

n<-1000

barplot(rep(1,times=n),col=rainbow(n),border=rainbow(n),horiz=T,axes=F,main="Rainbow Color")

barplot(rep(1,times=n),col=heat.colors(n),border=heat.colors(n),horiz=T,axes=F,main="Heat.Colors")

barplot(rep(1,times=n),col=terrain.colors(n),border=terrain.colors(n),horiz=T,axes=F,main="Terrain.Colors")

barplot(rep(1,times=n),col=topo.colors(n),border=topo.colors(n),horiz=T,axes=F,main="Topo.Colors")

barplot(rep(1,times=n),col=cm.colors(n),border=cm.colors(n),horiz=T,axes=F,main="Cm.Colors")



运行以上代码之后,你会看到绘图面板上出现的五个色板色彩过渡效果,第一个rainbow是运用最为频繁的的色板,也是我们所熟知的彩虹七色,其余四个是截取rainbow色斑的某一段暖色系、冷色系或者单色做的渐变过渡。

五种颜色调用方法非常简单,名称+数量就可以。而且你也可以通过文本函数将不同色盘中截取的颜色相互混合使用。

dev.off()#关闭上次的绘图面板

par(mfrow=c(2,1),mar=c(0.5,0.5,2,0.5),xaxs="i",yaxs="i")

a<-heat.colors(10)

b<-topo.colors(10)

barplot(rep(1,times=10),col=b,border=b,main="Topo.Colors10",axes=F)

barplot(rep(1,times=10),col=a,border=a,main="Heat.Colors10",axes=F)

dev.off()

c<-c(a[c(1,3,5,7,9)],b[c(2,4,6,8,10)])

barplot(rep(1,times=10),col=c,border=c,axes=F,main="topo&heat 10");box()


以上通过将两个色板提取出来的颜色进行组合,创造出了新的色彩组合。

R语言自定义颜色调用

接下来介绍R语言的第二大色彩系统,自定义颜色。

R语言系统中内置了657中带有自定义名称的颜色(就是我们平时所熟知的blue、red、grey等)。

通过colors()函数可以查看这657种颜色的色值及名称类别信息:

head(colors(),10)

 [1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1"

 [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"   

 [9] "aquamarine1"   "aquamarine2"  

library(plyr)

count(cl)


count函数列出了所有657中颜色名称。

使用show_col函数可以查看所有657中颜色的图形显示效果

show_col(cl,labels=F)#因为颜色数量太多,使用labels=F参数略去颜色色值信息。


使用colorRampPalette函数可以自由调用任何一种自定义颜色。

colorRamp(colors, bias = 1, space = c("rgb", "Lab"), interpolate = c("linear", "spline"))

colorRampPalette(colors, ...)

color函数的介绍如上,具体的参数解释可以通过?colorRampPalette查看他的官方文档,这里我们直接取色。

par(mfrow=c(1,4),mar=c(0.5,0.5,2,0.5),xaxs="i", yaxs="i")

n <- 1000

mycolors <- colorRampPalette(c("red", "green"))(n)

barplot(rep(1,times=n),col=mycolors,border=mycolors,horiz=T,axes=FALSE)

mycolors <- colorRampPalette(c("blue", "yellow", "orange"))(n)

barplot(rep(1,times=n),col=mycolors,border=mycolors,horiz=T,axes=FALSE)

mycolors <- colorRampPalette(c( "white", "gold", "yellow", "brown"), bias=1.2)(n)

barplot(rep(1,times=n),col=mycolors,border=mycolors,horiz=T,axes=FALSE)

mycolors <- colorRampPalette(c("red","gold", "yellow", "grey","orange"), bias=1.2)(n)

barplot(rep(1,times=n),col=mycolors,border=mycolors,horiz=T,axes=FALSE)

dev.off()




除了这两大色彩系统系统之外,R语言也支持直接以色值(HEX)形式输入的颜色,只需使用c()函数生成色值组成的字符向量,R语言就可自动识别。

还有一些特殊用途的grey函数,hsv函数等等可以通过设定灰度或者色调、饱和度、亮度等等方式获取颜色使用,这些由于过于繁琐,这里就略去了,甘感兴趣的小盆友可以自己探索。

当然,这里还没有讲解到那些已经做得很成熟的主题配色包,比如ggthemes(专为ggplot2开发的主题包)、RColorbrewer(里面存放着大量高质量的配色方案)、以及ggtech(是一个科技主题的配色包,主要供ggplot函数调用)。

通过scales包中的brewer.col,我们可以提取出以上各包的配色主题,来用于我们的可视化图表中,不光是ggplot绘图系统,即便是在基础绘图系统(base::plot)中也是可以调用这些色彩方案的



微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存