R语言:颜色设置
![此博文包含图片](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
绘图是R语言的主要功能之一,而颜色是传递信息的重要图形要素。CRAN有很多免费的R调色软件包可下载使用,但是如果能用好了R基本安装包里面的调色函数,完全没必要浪费大脑细胞去学那些软件包。下面就介绍几个这方面的函数。
一、R预设调色板
这一系列函数有5个,即:
rainbow
heat.colors
terrain.colors
topo.colors
cm.colors
在R环境里面输入问号(?)和上面任一函数名就可以获得这5个函数的用法说明。这些函数最少需要一个参数,n,表示要得到颜色的数量。n在系统允许范围内没有限制。下面用彩虹色调色板函数rainbow产生的颜色绘一个色盘:
五个调色板产生的颜色对比如下:
这些函数返回的值是向量,完全可以按向量的方式取子集,也可以将不同函数返回的颜色组合起来使用:
对于数据量较大的散点图,设置颜色透明度是非常必要的,这一项可以通过alpha参数设置:
hsv函数通过设置色调、饱和度和亮度获得颜色,三个值都是0-1的相对量,如果你对这些参数比较熟悉可以考虑使用。:
scales软件包提供了很多颜色设置的函数,其中的alpha对颜色的透明度设置很方便,可以考虑使用。
一、R预设调色板
这一系列函数有5个,即:
rainbow
heat.colors
terrain.colors
topo.colors
cm.colors
在R环境里面输入问号(?)和上面任一函数名就可以获得这5个函数的用法说明。这些函数最少需要一个参数,n,表示要得到颜色的数量。n在系统允许范围内没有限制。下面用彩虹色调色板函数rainbow产生的颜色绘一个色盘:
> setwd("D:/"); n=1000 > png("rainbow.disc.png", bg = "transparent") > par(mar = c(0,0,0,0)) > pie(rep(1,times=n),labels="",col=rainbow(n),border=rainbow(n)) > dev.off()运行后回在D盘根目录下得到一个rainbow.disc.png文件,图形如下:
五个调色板产生的颜色对比如下:
> par(mfrow=c(5,1)); par(mar=c(0.1,0.1,2,0.1));par(xaxs="i", yaxs="i") > n <- 10000 > barplot(rep(1,times=n),col=rainbow(n),border=rainbow(n),axes=FALSE, main="Rainbow colors");box() > barplot(rep(1,times=n),col=heat.colors(n),border=heat.colors(n),axes=FALSE, main="heat.colors");box() > barplot(rep(1,times=n),col=terrain.colors(n),border=terrain.colors(n),axes=FALSE,main="terrain.colors"); box() > barplot(rep(1,times=n),col=topo.colors(n),border=topo.colors(n),axes=FALSE, main="topo.colors");box() > barplot(rep(1,times=n),col=cm.colors(n),border=cm.colors(n),axes=FALSE, main="cm.colors"); box()
当然你可能不需要这么多颜色,改变n值就可以了:
> n <- 10 > barplot(rep(1,times=n),col=rainbow(n),border=rainbow(n),axes=FALSE, main="Rainbow colors");box() > barplot(rep(1,times=n),col=heat.colors(n),border=heat.colors(n),axes=FALSE, main="heat.colors");box() > barplot(rep(1,times=n),col=terrain.colors(n),border=terrain.colors(n),axes=FALSE,main="terrain.colors"); box() > barplot(rep(1,times=n),col=topo.colors(n),border=topo.colors(n),axes=FALSE, main="topo.colors");box() > barplot(rep(1,times=n),col=cm.colors(n),border=cm.colors(n),axes=FALSE, main="cm.colors"); box()
> par(mfrow=c(1,1)) > mycolors <- c(heat.colors(10)[c(1,3,5,7,9)], cm.colors(10)[c(2,4,6,8,10)]) > barplot(rep(1,times=10),col=mycolors,border=mycolors,axes=FALSE, + main="heat.colors(10)[c(1,3,5,7,9)], cm.colors(10)[c(2,4,6,8,10)]"); box()
对于数据量较大的散点图,设置颜色透明度是非常必要的,这一项可以通过alpha参数设置:
> mycolor <- rainbow(3, alpha=0.02) #alpha设置(不)透明度 > y1 <- 10+rnorm(10000); y2<- 5+rnorm(10000); y3 <- rnorm(10000) > par(mfcol=c(1,1)); par(mar=c(0.1,0.1,0.1,0.1));par(xaxs="i", yaxs="i") > plot(y1, pch=20, col=mycolor[1], ylim=c(min(y1,y2,y3),max(y1,y2,y3)), xlab="", ylab='', axes=F) > points(y2, pch=20, col=mycolor[2]) > points(y3, pch=20, col=mycolor[3]) > box()
二、自定义调色板
如果觉得R预设调色板不合用,可以用colorRampPalette函数自定义调色板。使用之前得熟悉几个R预定义的颜色名称,这些名称可以通过colors函数获得:
下面我们可以用这些颜色名称通过colorRampPalette函数产生自己的颜色系列。colorRampPalette的参数如下:
三、灰度和其他调色板函数
gray函数可以产生不同层次的灰度颜色。用法很简单:
如果觉得R预设调色板不合用,可以用colorRampPalette函数自定义调色板。使用之前得熟悉几个R预定义的颜色名称,这些名称可以通过colors函数获得:
> cl <- colors() > head(cl,10)当前版本有657个预置颜色名称,常用的颜色名称你肯定已经知道,比如“red", "green", "gray", "blue", "cyan", "purple", "yellow", "orange"。[1] "white" "aliceblue" "antiquewhite" "antiquewhite1" "antiquewhite2" [6] "antiquewhite3" "antiquewhite4" "aquamarine" "aquamarine1" "aquamarine2" > length(cl) [1] 657
下面我们可以用这些颜色名称通过colorRampPalette函数产生自己的颜色系列。colorRampPalette的参数如下:
colorRamp(colors, bias = 1, space = c("rgb", "Lab"), interpolate = c("linear", "spline")) colorRampPalette(colors, ...)
我们用它产生几个颜色系列:
> par(mfrow=c(3,1));par(mar=c(0.1,0.1,0.5,0.1));par(xaxs="i", yaxs="i") > n <- 1000 > mycolors <- colorRampPalette(c("blue", "orangeRed"))(n) > barplot(rep(1,times=n),col=mycolors,border=mycolors,axes=FALSE); box() > mycolors <- colorRampPalette(c("darkgreen", "yellow", "orangered"))(n) > barplot(rep(1,times=n),col=mycolors,border=mycolors,axes=FALSE); box() > mycolors <- colorRampPalette(c("blue", "white", "darkgreen", "yellow", "orangered"), bias=1.2)(n) > barplot(rep(1,times=n),col=mycolors,border=mycolors,axes=FALSE); box()
三、灰度和其他调色板函数
gray函数可以产生不同层次的灰度颜色。用法很简单:
> par(mfrow=c(1,1));par(mar=c(0.1,0.1,0.1,0.1));par(xaxs="i", yaxs="i") > n <- 1000 > mycolors <- gray(0:n/n) > barplot(rep(1,times=n),col=mycolors,border=mycolors,axes=FALSE); box()
hsv函数通过设置色调、饱和度和亮度获得颜色,三个值都是0-1的相对量,如果你对这些参数比较熟悉可以考虑使用。:
> par(mfcol=c(11,121)); par(mar=c(0,0,0,0));par(xaxs="i", yaxs="i") > x <- seq(0,10)/10 > ndx <- expand.grid(x, x, x) > mycolor <- hsv(ndx[,3],ndx[,2],ndx[,1]) > for(i in 1:nrow(ndx)){ + barplot(1,col=mycolor[i],border=mycolor[i],axes=FALSE) + }
scales软件包提供了很多颜色设置的函数,其中的alpha对颜色的透明度设置很方便,可以考虑使用。