R语⾔进阶之⼀:颜⾊设置
绘图是R语⾔的主要功能之⼀,⽽颜⾊是传递信息的重要图形要素。CRAN有很多免费的R调⾊软件包可下载使⽤,但是如果能⽤好了R基本安装包⾥⾯的调⾊函数,完全没必要浪费⼤脑细胞去学那些软件包。下⾯就介绍⼏个这⽅⾯的函数。look at me now
1 R预设调⾊板
英语小报
这⼀系列函数有5个,即:
rainbow
aqua lung
graceland
在R环境⾥⾯输⼊问号(?)和上⾯任⼀函数名就可以获得这5个函数的⽤法说明。这些函数最少需要⼀
个参数,n,表⽰要得到颜⾊的数量。n在系统允许范围内没有限制。下⾯⽤彩虹⾊调⾊板函数rainbow产⽣的颜⾊绘⼀个⾊盘:
n <-1000
png("rainbow.disc.png", bg = "transparent")
par(mar = c(0,0,0,0))
twistyspie(rep(1,times=n),labels="",col=rainbow(n),border=rainbow(n))
dev.off()
运⾏后会得到⼀个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),lors(n),lors(n),axes=FALSE, main="lors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="lors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="lors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="cm.colors"); box()
当然你可能不需要这么多颜⾊,改变n值就可以了:
n <-10
par(mfrow=c(5,1));
par(mar=c(0.1,0.1,2,0.1), xaxs="i", yaxs="i")
barplot(rep(1,times=n),col=rainbow(n),border=rainbow(n),axes=FALSE, main="Rainbow colors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="lors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="lors"); box() barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="lors"); box()
barplot(rep(1,times=n),lors(n),lors(n),axes=FALSE, main="cm.colors"); box()
这些函数返回的值是向量,完全可以按向量的⽅式取⼦集,也可以将不同函数返回的颜⾊组合起来使
⽤:
par(mfrow=c(1,1))
par(mar=c(0.1,0.1,2,0.1), xaxs="i", yaxs="i")
mycolors <-lors(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="lors(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)
ics节目表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()
2 ⾃定义调⾊板
如果觉得R预设调⾊板不合⽤,可以⽤colorRampPalette函数⾃定义调⾊板。使⽤之前得熟悉⼏个R预定义的颜⾊名称,这些名称可以通过colors函数获得:
cl <-colors()
head(cl,10)
2012浙江高考数学## [1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
## [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
## [9] "aquamarine1" "aquamarine2"
length(cl)
## [1] 657
当前版本有657个预置颜⾊名称,常⽤的颜⾊名称你肯定已经知道,⽐如 "red", "green", "gray", "blue", "cyan", "purple", "yellow", "orange"。下⾯我们可以⽤这些颜⾊名称通过colorRampPalette函数产⽣⾃⼰的颜⾊系列。colorRampPalette的参数如下:
colorRamp(colors, bias = 1, space = c("rgb", "Lab"), interpolate = c("linear", "spline"))
colorRampPalette(colors, ...)
我们⽤它产⽣⼏个颜⾊系列:tinyxml
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()
3 灰度和其他调⾊板函数
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()
美国voa慢速英语hsv函数通过设置⾊调、饱和度和亮度获得颜⾊,三个值都是0-1的相对量,如果你对这些参数⽐较熟悉可以考虑使⽤。:
par(mfcol=c(11,121)); par(mar=c(0,0,0,0));par(xaxs="i", yaxs="i")
x <-q(0,10)/10
ndx <-id(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对颜⾊的透明度设置很⽅便,可以考虑使⽤。有⼈可能喜欢⽤RColorBrewer软件包⾥⾯的不连续调⾊板,萝⼘⽩菜吧。
Author: ZGUANG@LZU
Created: 2015-07-24 五 08:26
24.3.1 ( mode 8.2.1)