一、RColorBrewer简介
RColorBrewer包提供了较多的配色方案,能够满足不同类型数据的需要。RColorBrewer包中提供的配色共分为3种类型,seq类型、qual类型以及div类型,其中seq类型的颜色可以表示为从低到高的有序数据,浅色代表低值数据,深色代表高值数据;qual适用于类别数据;div类型的颜色适用于强调两侧极端值(极大值与极小值)。
#字体加深部分为代码
install.packages("RColorBrewer")
library(RColorBrewer)
display.brewer.all()#显示所有颜色

brewer.pal.info#显示所有颜色的个数、类别等
brewer.pal.info["Blues",]#利用索引显示其中一种颜色信息

display.brewer.pal(9, "Blues")#查看一种颜色类型的配色

brewer.pal(9, "Blues") #查看该颜色下【十六进制颜色代码】
> [1] "#F7FBFF" "#DEEBF7" "#C6DBEF" "#9ECAE1" "#6BAED6" "#4292C6" "#2171B5" "#08519C" "#08306B"
二、在绘图中调用RColorBrewer颜色
#加载package
library(RColorBrewer)
(一)方式一:直接调用
#生成100个均值为100且标准差为1.5的数,并且重复100次
rand.data <- replicate(9,rnorm(100,100,sd=1.5))
#调用9个Blues颜色【注意brewer.pal中最小值为3】
boxplot(rand.data,col = brewer.pal(9,"Blues"))
#用9个YlOrRd颜色
boxplot(rand.data,col = brewer.pal(9,"YlOrRd"))
#结果如下图

(二)方式二:只调用其中一种颜色
#以Blues颜色为例,查看Blues颜色的十六进制代码
#查看Blues颜色的配色信息
brewer.pal(9, "Blues")
> [1] "#F7FBFF" "#DEEBF7" "#C6DBEF" "#9ECAE1" "#6BAED6" "#4292C6" "#2171B5" "#08519C" "#08306B"
rand.data <- replicate(9,rnorm(100,100,sd=1.5))
#选择"#6BAED6"颜色
boxplot(rand.data,col = "#6BAED6")
#选择"#08306B"颜色
boxplot(rand.data,col = "#08306B")
#结果如下图所示

(三)方式三:如果需要的颜色超出了RColorBrewer颜色的个数,如Blues颜色的个数为9个,如果需要配色的要素超过9个,则会产生配色不够的问题。此时有2种解决方法:
#方法一:循环调用
#生成100个均值为100且标准差为1.5的数,并且重复48次
rand.data <- replicate(48,rnorm(100,100,sd=1.5))
#分别重复调用6次"Set2"和"Pastel1"颜色
boxplot(rand.data,col = brewer.pal(8,"Set2"))
boxplot(rand.data,col = brewer.pal(8,"Pastel1"))
#结果如下图所示

方法二:生成一列新的颜色
#以"Set2"和"Pastel1"颜色为例,分别生成48种颜色
newpalette1<-colorRampPalette(brewer.pal(8,"Set2"))(48)
newpalette2<-colorRampPalette(brewer.pal(8,"Pastel1"))(48)
rand.data <- replicate(48,rnorm(100,100,sd=1.5))
#调用上边生成的颜色
boxplot(rand.data,col = newpalette1)
boxplot(rand.data,col = newpalette2)
#结果如下图所示

(四)多种颜色对比
library(RColorBrewer)
par(mfrow=c(1,2))
newpalette1<-colorRampPalette(brewer.pal(8,"YlOrRd"))(48)
newpalette2<-colorRampPalette(brewer.pal(8,"YlGnBu"))(48)
newpalette3<-colorRampPalette(brewer.pal(8,"Purples"))(48)
newpalette4<-colorRampPalette(brewer.pal(8,"Blues"))(48)
rand.data1 <- replicate(48,rnorm(100,100,sd=1.5))
rand.data2 <- replicate(48,rnorm(100,100,sd=1.5))
rand.data3 <- replicate(48,rnorm(100,100,sd=1.5))
rand.data4 <- replicate(48,rnorm(100,100,sd=1.5))
p1 <- boxplot(rand.data1,col = newpalette1)
p2 <- boxplot(rand.data2,col = newpalette2)
p3 <- boxplot(rand.data3,col = newpalette3)
p4 <- boxplot(rand.data4,col = newpalette4)
dev.off()
#结果如下图所示


三、其他
1.可在Console中输入?RColorBrewer查看官方帮助文档。
2.rnorm()函数
rnorm(n, mean = 0, sd = 1)#产生n个均值为0的数,且标准差为1
3.replicate函数
replicate(n, expr)#n表示重复执行次数;expr表示待执行表达式
4.生成属于自己的颜色
rand.data_demo <- replicate(5,rnorm(10,10,sd=1.5))
#生成单一颜色
mypalette_demo <- "#08306B"
#生成连续颜色
mypalette_demo1 <- brewer.pal(5,"Blues")
mypalette_demo2 <- brewer.pal(5,"YlGnBu")
#调用单一颜色
boxplot(rand.data11,col = mypalette_demo)
#调用连续颜色
boxplot(rand.data11,col = mypalette_demo1)
boxplot(rand.data11,col = mypalette_demo2)
#结果如下图所示

5.颜色反转
使用rev()函数,如将上文中的p1、p2、p3、p4中的col函数分别进行反转【col = newpalette1改为col = rev(newpalette1)】,则生产的图形如下图所示


最后,可以动手尝试对以往所绘制的图形配色进行修改哦
附:颜色名称
BrBG、PiYG、PRGn、PuOr、RdBu、RdGy、RdYlBu、RdYlGn、Spectral、Accent、Dark2、Paired、Pastel1、Pastel2、Set1、Set2、Set3、Blues、BuGn、BuPu、GnBu、Greens、Greys、Oranges、OrRd、PuBu、PuBuGn、PuRd、Purples、RdPu、Reds、YlGn、YlGnBu、YlOrBr、YlOrRd




