1. 程式人生 > >R語言進階之一:顏色設定

R語言進階之一:顏色設定

這一系列函式有5個,即:

  • rainbow
  • heat.colors
  • terrain.colors
  • topo.colors
  • cm.colors

在R環境裡面輸入問號(?)和上面任一函式名就可以獲得這5個函式的用法說明。這些函式最少需要一個引數,n,表示要得到顏色的數量。n在系統允許範圍內沒有限制。下面用彩虹色調色盤函式rainbow產生的顏色繪一個色盤:

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()

執行後會得到一個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
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),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))
par(mar=c(0.1,0.1,2,0.1), xaxs="i", yaxs="i")
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()