之前介绍了使用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))
最后祝大家早日不卷!~