R 中关于颜色的工具
- colors()
- palette()
- hsv()
- hcl()
- rgb()
- gray()
- col2rgb()
R 中原生的简单的连续系列配色工具有
- rainbow() 彩虹属性配色
- heat.colors() 热属性配色
- terrain.colors() 土属性配色
- topo.colors() 地球属性配色
- cm.colors()
使用彩虹配色工具画一个调色盘
require(graphics)
pie(rep(1, 12), col = rainbow(12))
R中的彩虹配色
下面例子中的这个函数用来画出这组连续系列的配色板
demo.pal <-
function(n, border = if (n < 32) "light gray" else NA,
main = paste("color palettes; n=", n),
ch.col = c("rainbow(n, start=.7, end=.1)", "heat.colors(n)",
"terrain.colors(n)", "topo.colors(n)",
"cm.colors(n)"))
{
nt <- length(ch.col)
i <- 1:n; j <- n / nt; d <- j/6; dy <- 2*d
plot(i, i+d, type = "n", yaxt = "n", ylab = "", main = main)
for (k in 1:nt) {
rect(i-.5, (k-1)*j+ dy, i+.4, k*j,
col = eval(parse(text = ch.col[k])), border = border)
text(2*j, k * j + dy/4, ch.col[k])
}
}
demo.pal(16)
R中的配色工具
成熟的配色包有 RColorBrewer 。 安装 RColorBrewer 调色板工具包。
install.packages('RColorBrewer')
列出 RColorBrewer 中的调色板
> library(RColorBrewer)
> 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
RdYlBu 11 div TRUE
RdYlGn 11 div FALSE
Spectral 11 div FALSE
Accent 8 qual FALSE
Dark2 8 qual TRUE
Paired 12 qual TRUE
Pastel1 9 qual FALSE
Pastel2 8 qual FALSE
Set1 9 qual FALSE
Set2 8 qual TRUE
Set3 12 qual FALSE
Blues 9 seq TRUE
BuGn 9 seq TRUE
BuPu 9 seq TRUE
GnBu 9 seq TRUE
Greens 9 seq TRUE
Greys 9 seq TRUE
Oranges 9 seq TRUE
OrRd 9 seq TRUE
PuBu 9 seq TRUE
PuBuGn 9 seq TRUE
PuRd 9 seq TRUE
Purples 9 seq TRUE
RdPu 9 seq TRUE
Reds 9 seq TRUE
YlGn 9 seq TRUE
YlGnBu 9 seq TRUE
YlOrBr 9 seq TRUE
YlOrRd 9 seq TRUE
第一列为调色板的名字,maxcolors为最多提供的颜色个数,category分为三类:
- sequential 连续系
- diverging 分歧系
- qualitative 均匀系
画出 RColorBrewer 中所有的调色方案:
display.brewer.all(n=10, exact.n=FALSE)
RColorBrewer的配色工具
使用 RColorBrewer 调色板中的 Blues 调色板,取5个颜色。因为前面的颜色比较淡,容 易被白色背景掩盖,所以舍弃前面的两个颜色。
library(RColorBrewer)
col <- brewer.pal(7, 'Blues')[3:7]
使用 RColorBrewer 中的调节方案,在一张图上画5条曲线的效果。
x <- sort(rnorm(100))
plot(c(1,20), range(x), xlab='Index', ylab='Y', type='n')
for (i in 1:5) lines(x[(1:20)*i], type='b', col=col[i], pch=i)
RColorBrewer的效果
更考究的配色包有 ggsci,它从科学期刊、数据可视化程 序库、科幻电影及电视节目中获得灵感,据此提供了一些非常漂亮的配色方案。 这些配色的调色板可以从 ggplot2 的 scales 中得到。 首先需要安装这个配色工具包:
install.packages('ggsci')
然后载入两个包使它工作。
library(ggsci)
library(scales)
ggsci 中的配色方案表如下
Name Category Colors
aaas default 10
gsea default 12
jco default 10
material red NA
material pink NA
material purple NA
material deep-purple NA
material indigo NA
material blue NA
material light-blue NA
material cyan NA
material teal NA
material green NA
material light-green NA
material lime NA
material yellow NA
material amber NA
material orange NA
material deep-orange NA
material brown NA
material grey NA
material blue-grey NA
rickandmorty schwifty 12
tron legacy 7
d3 category10 10
d3 category20 20
d3 category20b 20
d3 category20c 20
igv default 51
igv alternating 2
lancet lanonc 9
nejm default 8
simpsons springfield 16
uchicago default 9
uchicago light 9
uchicago dark 9
futurama planetexpress 12
jama default 7
locuszoom default 7
npg nrc 10
startrek uniform 7
ucscgb default 26
其中每个配色方案对应一个杂志的常配色。
输出 aaas 杂志的配色颜色值
pal_aaas('default', 0.8)(10)
使用show_col()查看具体颜色
show_col( pal_aaas('default', 0.8)(10) )
获得 ggsci 的全面帮助,可以使用如下命令
vignette('ggsci')
这个命令将启动一个帮助服务,并打开浏览器定位到相应的帮助页面。 下面是使用 aaas 配色作图的一个例子:
# 加载 ggsci、ggplot2、gridExtra,用于作图
library("ggsci")
library("ggplot2")
library("gridExtra")
# 加载数据 diamonds
data("diamonds")
# 第一张图
p1 = ggplot(subset(diamonds, carat >= 2.2),
aes(x = table, y = price, colour = cut)) +
geom_point(alpha = 0.7) +
geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) +
theme_bw()
# 第二张图
p2 = ggplot(subset(diamonds, carat > 2.2 & depth > 55 & depth < 70),
aes(x = depth, fill = cut)) +
geom_histogram(colour = "black", binwidth = 1, position = "dodge") +
theme_bw()
# 使用 grid.array() 把两张图用 aaas 调色板并列画出来
grid.arrange(p1 + scale_color_aaas(), p2 + scale_color_aaas(), ncol=2)
并列的两张数据图:
ggsci aaas的配色效果