之前介绍了使用ggsci包进行配色,颜值很高,但有时候你可能需要更多的颜色。
本期介绍一下RColorBrewer包,万金油包,几乎适用任何情况。😘
rm(list = ls())
library(tidyverse)
library(RColorBrewer)
library(patchwork)
本期就用大名鼎鼎的iris吧。
dat <- iris

display.brewer.all()

Note! 这个包里包含3种配色,sequential, diverging, 和qualitative。 🤩
✅ sequential: Blues,BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd。(颜色由低到高渐变。) ↗️
✅ Qualitative: Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3。(颜色区分较大,适合分类变量,如分组变量等。) 🔠
✅ Diverging: BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral。(颜色由高-低-高,适合heatmap等。) ↘️ ➡️ ↗️
熟悉了配色以后,你可能只想看一个配色方案,可以这样做:
display.brewer.pal(n = 8, name = 'Dark2')

brewer.pal(n = 8, name = "Dark2")

这里我们以ggplot绘图为例。
bp <- ggplot(dat, aes(Species, Sepal.Length)) +
geom_boxplot(aes(fill = Species)) +
theme_minimal() +
theme(legend.position = "top")
sp <- ggplot(dat, aes(Sepal.Length, Sepal.Width)) +
geom_point(aes(color = Species)) +
theme_minimal()+
theme(legend.position = "top")
bp + sp

这里我们以改变分组颜色为例,选用Dark2配色。
bp2 <- bp + scale_fill_brewer(palette = "Dark2")
sp2 <- sp + scale_color_brewer(palette = "Dark2")
bp2 + sp2

这里补充一下再base绘图时如何应用brewer.pal函数。
barplot(c(4,10,11, 7), col = brewer.pal(n = 4, name = "RdBu"))

Q: 细心的小伙伴可能发现了,这个配色最多的也才十几个,要是我需要的配色多于这个数怎么办呢?
A: ok~, 这里提供一下解决方案。
这里大家可以发现,用scale_color_brewer函数进行配色时,颜色是不够的,因为Set2只有8个配色,所以很多点都不显示了。
dat <- dat %>%
mutate(., cat = rep(1:30, 5))
p1 <- ggplot(dat, aes(Sepal.Length, Sepal.Width)) +
geom_point(aes(color = factor(cat))) +
theme_bw()
p2 <- ggplot(dat, aes(Sepal.Length, Sepal.Width)) +
geom_point(aes(color = factor(cat))) +
theme_bw()+
scale_color_brewer(palette = "Set2")
p1 + p2

在我们的示例数据中cat包含30个分类,所以我们至少要生成30个颜色才行,用到的函数是colorRampPalette。
colourCount <- length(unique(dat$cat))
ggplot(dat, aes(Sepal.Length, Sepal.Width)) +
geom_point(aes(color = factor(cat))) +
theme_bw()+
scale_color_manual(values = colorRampPalette(brewer.pal(8, "Set2"))(colourCount))


最后祝大家早日不卷!~