在7月份,本号推出了一个关于R语言配色方法的系列推文,其中第III节介绍了ggplot2工具包的配色方法——颜色标度函数

在这篇推文中,小编介绍了针对两种变量类型的三种颜色标度函数,即

  • 离散型变量:离散型标度
  • 连续型变量:连续型标度、分箱型标度

其中,离散型标度是把等数目的颜色依次赋值给离散变量的各个类别,连续型标度则由用户先指定颜色的极端值(和中间值),然后再由工具包通过计算来生成连续的颜色带。

分箱型标度虽然相当于将连续型变量转化为离散型变量,但其配色思想还是类似于连续型标度,即先由用户指定颜色的极端值(和中间值),再由工具包计算其余的颜色类别,以构成具有过渡特征的离散颜色带。

这种配色方法虽然方便,但缺点是用户不能够灵活地控制所生成的颜色带,尤其对缺乏色彩知识的用户来说,由于难以准确预判生产的颜色效果而很大可能会对结果不满意。

library(ggplot2)
library(patchwork)
set.seed(20211001)
df <- data.frame(x = 1:40, y = rnorm(40))
p <- ggplot(df, aes(x, y, color = y)) + 
  geom_point(size = 2) + 
  labs(x = NULL, y = NULL)
p1 <- p + scale_color_steps(low = "blue", high = "red")
p2 <- p + scale_color_steps(low = "blue", high = "red",
                            breaks = c(-Inf, -1, 1, Inf))
p1 + p2



R语言调色板代码 r语言连续型调色板_R语言调色板代码

上面就是一个使用分箱型标度函数的案例,相对于左图,右图通过调用breaks参数实现了自定义分箱的数目,但颜色选取还是比较受限制。

与之相反的是,离散型标度虽然看起来比较繁琐,但其优点恰恰是灵活,用户日常中可以积累一些好看的颜色组合,在使用时再进行手动赋值;再者,grDevicesRColorBrewer等工具包还提供了大量的离散调色板,用户觉得满意就可以直接调用。

可惜的是,在ggplot2中,对连续型变量并不能调用离散型标度函数,否则会报错。如下例:

p + scale_color_brewer()
## 错误: Continuous value supplied to discrete scale

对于一些具有分类特征的变量,可以使用factor()函数直接将其转为离散型变量(即因子变量),但这种方法并不通用。下面小编就介绍一种通用的方法,使用的函数是scale_colour_stepsn()

scale_colour_stepsn()函数是分箱标度函数scale_colour_steps()的拓展版,其可以为颜色带指定若干个临界值(极端值+中间值)。基本思路如下:

  • 先通过n.breaksbreaks参数确定分箱的数目;
  • 再通过colorscolours参数指定等量的颜色临界值,在指定临界值时可以调用离散调色板。
p + 
  scale_color_stepsn(n.breaks = 3,
    colors = grey.colors(4))



R语言调色板代码 r语言连续型调色板_python_02

library(RColorBrewer)
p + 
  scale_color_stepsn(breaks = c(-1.5, 0, 1.5),
    colors = brewer.pal(4, "Dark2"))



R语言调色板代码 r语言连续型调色板_scala_03

最后祝大家假期愉快!