1、前 言
在人类的世界中,往往对图像的感觉比数据更加敏感。在分析师界有“一图胜千言”之说,笔者在多次公开的讲演、授课中,发现无论是如何深入、准确的分析,都不及简洁、明了的图像更能打动听众。如果说在医学研究与报告中图形能展现研究的精妙之处,图形的色彩则是让人眼前一亮的“点睛之笔”。因此,假如想拥有打动人心的分析与图表,颜色调和是需要掌握的。也就是说为分析图形配上合适的色彩是数据分析的重要组成部分。
dvdf
在关注分析的R语言世界中,色彩的调配方式也是十分丰富的。既可以使用自带的颜色名称(如“white”)、十六进制数值(“#000000”)、RBG三原色比例、色相饱和度等方法调取颜色,或者使用“懒人色包”(如rainbow/heat.color/cm.color等)自动生成调色,当然也可以RColorBrewer包生成漂亮的预设色系。详情可点击文末链接参考之前的文章。
然而,在分析中往往需要采用特定的颜色搭配去凸显或对比我们的图形,而一般人可能对颜色不太敏感。那该如何生成我们需要的一系列颜色呢?今天,我们介绍一个神奇的调色包——colortoos,它能让您通过颜色的关系与色轮工具(姑且这样叫吧),在最短时间内简单调制出各种你所需的颜色,你也能成为创造色彩的达人。
本文章的上篇首先会详细介绍colortools包调色的基本命令,辅以简单的例子进行说明。下篇分将进入进阶颜色调配,我们将所调配的颜色/色系运用至分析实战中。
2、色轮、颜色关系的基本原理与数据的准备
要掌握调色,首先讲讲色轮的基本原理。所谓色轮,是美术与颜色领域的一个术语。简单来说就是首先给定一个颜色,然后通过不断加白色(tints)与加黑(shades)生成一系列颜色,然后自然形成由一系列颜色组成的调色盘。下图中展示的就是色轮的基本原理与生成过程。当生成一个色轮后,我们可以通过不同的需求,选择色轮上丰富的颜色。
image色轮是我们认识颜色关系的工具,常常会用在颜色调配的专业领域,我们简单介绍一下四种常用的颜色系。
(1)单色搭配( Monochromatic ),一种色由暗、中、明三种色调组成。这就是单色。单色搭配上并没有形成颜色的层次,但形成了明暗的层次。这种色系在图形中常用到,出来的效果永远不错,其重要性也可见一斑。
(2)类比色搭配( Analogous ),就是一种颜色两旁相邻的颜色我们称为类比色。类比色都拥有共同的颜色。这种颜色搭配产生了一种令人悦目、低对比度的和谐美感。类比色非常丰富,在设计时应用这种搭配同样让你轻易产生不错的视觉效果。
(3)补色/对比色搭配( Complement )在色轮上直线相对的两种颜色称为补色,如橙色及蓝色。补色形成强列的对比效果。
(4)分裂补色( Split complement )如果同时调和补色及类比色的关系来就称为分裂补色。这种颜色搭配既具有类比色的低对比度的美感,又具有补色的力量感。形成了一种既和谐又有重点的颜色关系。我们只要记住四种基本的颜色关系。每一种颜色关系都可以有无数种搭配的可能,当你掌握它们时,你就可以创造出各种颜色与搭配。
﹏
﹏
﹏
﹏
好,颜色理论说到这里,以上四种颜色关系,在神奇的R语言世界中很容易的实现。现在请跟着我们的脚步,马上进入探索色轮的世界。
Install.packages(colortools)
library(colortools)
首先还是安装与载入colortools包
my<-colors()
通过color命令获取系统颜色的名字
head(my,10)
[1] "white" "aliceblue" "antiquewhite"[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"[7] "antiquewhite4" "aquamarine" "aquamarine1"[10] "aquamarine2"
这包括了所有R基础包自带的颜色,预览前十个
3、色轮的应用
3.1简单的色轮的生成
首先,我们生成一个简单的色轮,需要用到wheel的命令。wheel命令包括以下参数,其中,color与num是最关键的色轮生成命令参数。
wheel(color, num = 12, bg = "gray95", border = NULL, init.angle = 105, cex = 1, lty = NULL, main = NULL, verbose = TRUE, ...)
my1=wheel(“blue”,num=12)
自己动手生成色轮,数目为12份
image非常好,我们简单的生成了以“blue”为起点的一个色轮,获得了一系列颜色的十六进制名字,颜色方案,可以直接用于画图,我们利用柱状图进行展示。形成了一系列彩虹色。
barplot(1:12,names.arg=my1,col=my1,las=2)
将生成的颜色用于柱状图的绘制
image3.2单色搭配(Monochromatic )色系的生成
色轮非常方便生成渐变的独特色系。运行以下命令,可以生成以blue为终点的一系列过度色。sequential("blue")[1] "#FFFFFFFF" "#F2F2FFFF" "#E6E6FFFF" "#D9D9FFFF" "#CCCCFFFF"[6] "#BFBFFFFF" "#B3B3FFFF" "#A6A6FFFF" "#9999FFFF" "#8C8CFFFF"[11] "#8080FFFF" "#7373FFFF" "#6666FFFF" "#5959FFFF" "#4C4CFFFF"[16] "#4040FFFF" "#3333FFFF" "#2626FFFF" "#1919FFFF" "#0D0DFFFF"[21] "#0000FFFF"
imagesequential("red")
[1] "#FFFFFFFF" "#FFF2F2FF" "#FFE6E6FF" "#FFD9D9FF" "#FFCCCCFF"[6] "#FFBFBFFF" "#FFB3B3FF" "#FFA6A6FF" "#FF9999FF" "#FF8C8CFF"[11] "#FF8080FF" "#FF7373FF" "#FF6666FF" "#FF5959FF" "#FF4C4CFF"[16] "#FF4040FF" "#FF3333FF" "#FF2626FF" "#FF1919FF" "#FF0D0DFF"[21] "#FF0000FF"
image3.3类比色搭配(Analogous )与补色/对比色搭配(Complement )
色轮可以方便地生成相邻、对比等色系,其命令的基本参数都是相近的,请看以下的操作。
adjacent(color, plot = TRUE, bg = "white", labcol = NULL, cex = 0.8, title = TRUE)#color代表颜色的名称或十六进制数值,plot代表是否生成图片,labecol标注的颜色,cex字体大小,title是否显示题目analogous("blue")adjacent(“blue”)[1] "#0000FF" "#8000FF" "#0080FF"#两个命令等价的
imageadjacent("#0000FF")#蓝色的十六进制值也可以adjacent("blue", plot = FALSE)#也可以不显示图然后,我们来看看对比色的生成。对比色对图形的凸显有非常重要的作用。complementary(“blue”)[1] "#0000FF" "#FFFF00"#比色的生成,基本参数与相邻色的一致
image3.4分散对比色与四色互补色生成互补色有多种形成的方法,一般多用于不同组别分析的对比中,可以使图像既和谐又突出重点。首先是分散对比色的生成。splitComp("blue")[1] "#0000FF" "#FF7F00" "#80FF00"#分散对比色生成,通常这种对比色颜色比较柔和。
image然后是四色互补色系生成。
tetradic("blue")[1] "#0000FF" "#FF00FF" "#FFFF00" "#00FF00"
imagesquare("steelblue")
方形对比色系生成,其实就是抽取四个方位的颜色
image4、 一些色彩生成命令
以上简单介绍了色轮及其四种颜色关系的获取方法,大家已经基本掌握了简colortools包调色的使用,同时,包内还提供快速设定一系列颜色与获取其名称的命令。通过setColors 可以生成一系列过渡的色块,方便我们提取颜色。
setColors("tomato", num=18)[1] "#FF6347" "#FFA047" "#FFDE47" "#E3FF47" "#A6FF47" "#68FF47"[7] "#47FF63" "#47FFA0" "#47FFDE" "#47E3FF" "#47A6FF" "#4768FF"[13] "#6347FF" "#A047FF" "#DE47FF" "#FF47E3" "#FF47A6" "#FF4768"barplot(1:18,col=my2,bg="white")#setColors接受颜色的名字以及生成色块的数量
image另一个pizza命令,可以给你所调配的颜色进行可视化,方便地显示我们的调色结果与颜色样本。pizza(rainbow(10))#与彩虹色命令结合生成一系列动人的颜色
imagepizza(heat.colors(10))
与暖色结合生成一系列的色系
image两个命令结合来用可以生成新色轮。
p<-setColors(3, num=18)#设定颜色的下标值也是可以生成色轮,3代表“green3”pizza(p)
imagepizza(setColors("tomato", num=18), cex = 0.7)#配合setColors,选择自定义系列的配色
imagehist(rnorm(100),breaks=10,col=p)
频率图使用我们自配的颜色
image当然,colortools也为大家准备了现成的调色板,包括一系列赏心悦目的颜色系列,如dream,terra等,大家自己可以细细体会。
pals()
imagebarplot(1:5,col=pals("cheer"))
imageboxplot(len~dose*supp,data=ToothGrowth,col=pals("cheer"),xlab="group",ylab="len")
箱图的绘制
image5、colortoos包运用的简单案例
以上,我们所调配的颜色,可以运用到之前热图与聚类分析中。关于热图与聚类分析,请参考之前的《一手把握聚类分析,轻松实现数据挖掘的可视化》与《热图是怎么炼成的》一文。
我们直接给出代码,请重点关注颜色应用的部分。library(pheatmap)library(cluster)library(ape)my2<-setColors("blue",num=12)my3<-pals(“drift”)pheatmap(scale(mtcars),col=my2)#配色可以让我们生成热图中的数据更加清晰、直观
imagepheatmap(scale(mtcars),col=sequential("blue",10))
单色调过渡,会强调数量之间的变化情况
imagepheatmap(sclae(mtcars),col=my3,cutree_rows = 3)
相邻色与对比色的使用突出异常值与数量关系,如红色显示极大值
imageplot(as.phylo(hclust(dist(scale(mtcars)))),tip.col=my1)#聚类分析也可以用得上,我们将末端的颜色赋予我们调配的色系
imageplot(as.phylo(hclust(dist(scale(mtcars)))),type=”fan”,tip.col=my3)
imageset.seed(100)
m.c<-kmeans(scale(mtcars),centers=3)pairs(mtcars[,1:5],pch=21,bg=pals("mystery")[m.c$cluster])#散点图与k-mean聚类联合分析中,不同互补色系可以更加和谐的表征不同组别的点的分布
image5、小 结
以上,只是为大家介绍了色轮调色的关键命令与配色技巧,通过掌握色轮与四种颜色关系的特点,我们也可以获得准确的颜色值、渐变色与互补色等。虽然命令简单,但是灵活使用的话,可以便捷的得到我们想要的配色乃至独特的色系。而进一步来讲,生成统一,悦目与突出重点的图形,在医学分析的可视化领域有着重要的应用。详细的使用攻略,我们留待下一篇实战篇为您揭晓。
网友评论