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-pal-rainbowR中的彩虹配色

下面例子中的这个函数用来画出这组连续系列的配色板

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-pal-colorsR中的配色工具

成熟的配色包有 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)

r-pal-brewerRColorBrewer的配色工具

使用 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)

r-pal-linesRColorBrewer的效果

更考究的配色包有 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)

并列的两张数据图:

r-pal-ggsciggsci aaas的配色效果