前言:巧妙的色彩搭配,能够绘制出更具审美价值的图片,令人耳目一新。
本文主要讲解比较受欢迎的R包配色方案。
(一):RColorBrewer 包
调色板有3种类型:连续型调色板、离散型调色板和定性调色板。
连续型调色板,适用于从低到高(渐变)的有序数据。
Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu YlOrBr, YlOrRd
离散型调色板,同时强调中端临界值和数据范围两端的极端值。
BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral
定性调色板,适用于名义型或分类型变量。 它们并不代表组之间的大小差异。
Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3
rm(list = ls())
install.packages("RColorBrewer")
library(RColorBrewer)
# 绘制 RColorBrewer 调色板
display.brewer.all()
head(brewer.pal.info)
maxcolors category colorblind
BrBG 11 div TRUE
PiYG 11 div TRUE
PRGn 11 div TRUE
PuOr 11 div TRUE
RdBu 11 div TRUE
RdGy 11 div FALSE
绘图应用[1]
# 通过指定名字来查看调色板
display.brewer.pal(n = 8, name = 'RdBu')
# 十六进制颜色规格
brewer.pal(n = 8, name = "RdBu")
[1] "#B2182B" "#D6604D" "#F4A582" "#FDDBC7" "#D1E5F0" "#92C5DE" "#4393C3" "#2166AC"
# RColorBrewer绘制条形图
barplot(c(2,5,7), col=brewer.pal(n = 3, name = "RdBu"))
(二):Wes Anderson包
Wes Anderson,电影导演韦斯·安德森,善于运用色彩。
最欣赏的一点是他以色调和对称构图来讲述惟妙惟肖的故事情节,而不是使用过多复杂花哨的拍摄方式诠释自己的才能。[1]
install.packages("wesanderson")
library(wesanderson)
# See all palettes
names(wes_palettes)
[1] "BottleRocket1" "BottleRocket2" "Rushmore1" "Rushmore" "Royal1"
[6] "Royal2" "Zissou1" "Darjeeling1" "Darjeeling2" "Chevalier1"
[11] "FantasticFox1" "Moonrise1" "Moonrise2" "Moonrise3" "Cavalcanti1"
[16] "GrandBudapest1" "GrandBudapest2" "IsleofDogs1" "IsleofDogs2"
绘图应用[2]
barplot(c(2,5,7), col = wes_palette(n=3, name="GrandBudapest1")) # 此处英文有误
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point(size = 2) +
scale_color_manual(values = wes_palette(n=3, name="GrandBudapest1"))
(三):创建n个连续颜色的向量
可以使用函数rainbow(n), heat.colors(n), terrain.colors(n), topo.colors(n)和cm.colors(n)生成n个连续颜色的向量
绘图应用[3]
#Create a vector of n contiguous colors
# Use rainbow colors
barplot(1:5, col=rainbow(5))
# Use heat.colors
barplot(1:5, col=heat.colors(5))
# Use terrain.colors
barplot(1:5, col=terrain.colors(5))
# Use topo.colors
barplot(1:5, col=topo.colors(5))
# Use cm.colors
barplot(1:5, col=cm.colors(5))
(四):产生渐变颜色colorRamp()和colorRampPalette()[2]
colorRamp()和colorRampPalette()都可用于建立颜色板。想象一下你现在有一个色板,色板上有红色,蓝色,和白色,你就可以用colorRamp()和colorRampPalette()基于这三个颜色就行调色,两者的不同在于,colorRamp() 可以指定一个小数,返回一个指定的颜色值,需要用rgb方法转换;
colorRampPalette()返回指定数量的颜色值,两个方法可以达到相同的效果:
绘图应用[4]
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")
参考资料:
-
Wes Anderson's Colour Palettes - 从电影中寻找配色灵感 | Lucca ↩
-
R语言中的颜色以及色板 ↩