R语言中的颜色以及色板

R语言中的颜色以及色板

可视化数据时,色彩往往是最欠考虑的因素。的确,在一个图中,数据的选择和图表类型的确定才是最重要,最需要确定的因素。但是,适当的选择颜色不仅仅能使数据图的阅读者赏心悦目,而且有助于图中数据关系的呈现,使得整个图表更有说服力。这篇文章将简单介绍R语言中的色彩和调色板相关package和函数。


1.R语言中的默认颜色


R中可以通过定义col参数自定义颜色。有以下四种方法进行设置,是等价的:

  1. 数字:(如1代表当前palette的第1种颜色,2代表当前palette的第2种颜色等); 
  2. 颜色名:(如”red”,”blue”)、可以使用colors()获得所有颜色名称列表
  3. RGB:使用rgb()函数得到的返回值 rgb(1, 0, 0)
  4. 十六进制颜色代码:#FF0000


barplot(1:4, col = c(2, "red", rgb(1, 0, 0), "#FF0000"))

attachments-2019-03-py5eAkh05c88b68465f85.jpg

人们不禁要问,不同数字代表的都是什么颜色?

通过palette()函数,可以看到在当前调色板下,第一种颜色是黑色,第二种颜色是红色。这个调色板共有8种颜色,当使用颜色数大于8时,会从头开始。

palette()

## [1] "black"   "red"     "green3"  "blue"    "cyan"    "magenta" "yellow" 
## [8] "gray"


调色板当然是可以改变的,比如用系统中的彩虹调色板。此时,第二位可就不是红色了。

palette(rainbow(12))
barplot(1:4, col = c(2, "red", rgb(1, 0, 0), "#FF0000"))

attachments-2019-03-jVoeVbqt5c88b756b7204.jpg

通过再次将palette设置为”default”,可以得到默认调色板。

palette("default")

2.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格式的色值信息.


attachments-2019-03-lhXhYtkb5c88b84bdf80d.jpg

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

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


attachments-2019-03-y33CprMh5c88b872a3072.jpg

运行以上代码之后,你会看到绘图面板上出现的五个色板色彩过渡效果,第一个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)

attachments-2019-03-xnMSuNyn5c88b89954dd5.jpg


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

attachments-2019-03-kuRen5685c88c4c8eb464.jpg

3.产生渐变颜色colorRamp()和colorRampPalette():


colorRamp()和colorRampPalette()都可用于建立颜色板。想象一下你现在有一个色板,色板上有红色,蓝色,和白色,你就可以用colorRamp()和colorRampPalette()基于这三个颜色就行调色,两者的不同在于,colorRamp() 可以指定一个小数,返回一个指定的颜色值,需要用rgb方法转换;

colorRampPalette()返回指定数量的颜色值,两个方法可以达到相同的效果:

par(mfrow = c(1, 2))
b2p1 <- colorRampPalette(c("red", "white","blue"))
b2p2 <- colorRamp(c("red", "white","blue"))

barplot(rep(1, 12), axes=F, col = b2p1(12), border = b2p1(12), main = "colorRampPalette")

rgb( b2p2(seq(0, 1, length = 12)), max = 255)

barplot(rep(1, 12), axes=F,col = rgb( b2p2(seq(0, 1, length = 12)), max = 255), border = rgb( b2p2(seq(0, 1, length = 12)), max = 255), main = "colorRamp")


attachments-2019-03-Yh1tRJVz5c8f74613821e.jpg

4.RColorBrewer包色板

虽然说RColorBrewer包中实际用到的就只有brewer.pal()函数,但是包中的两个优点使得其非常实用。一是,包中颜色板被划分为序列型(sequential)、离散型(diverging)、分类型(qualitative)这三种基本能满足统计作图需要的类型;二是,颜色都比较协调。更多指引见其官网ColorBrewer

require("RColorBrewer")
display.brewer.all()

attachments-2019-03-q6nT5mPW5c88c3f496d2d.jpg取出对应色板颜色,以及数量:

brewer.pal(9, "Purples")
[1] "#FCFBFD" "#EFEDF5" "#DADAEB" "#BCBDDC" "#9E9AC8" "#807DBA" "#6A51A3" "#54278F" "#3F007D"


更多R语言可学习:R语言画图R语言快速入门与提高


  • 发表于 2019-03-13 15:51
  • 阅读 ( 43973 )
  • 分类:R

0 条评论

请先 登录 后评论
omicsgene
omicsgene

生物信息

698 篇文章

作家榜 »

  1. omicsgene 698 文章
  2. 安生水 347 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. 红橙子 78 文章
  7. rzx 74 文章
  8. CORNERSTONE 72 文章