jamesbang

V1

2022/09/29阅读:46主题:雁栖湖

🤩 RColorBrewer | 再多的配色也能轻松搞定!~(二)

1写在前面

之前介绍了使用ggsci包进行配色,颜值很高,但有时候你可能需要更多的颜色。
本期介绍一下RColorBrewer包,万金油包,几乎适用任何情况。😘

2用到的包

rm(list = ls())
library(tidyverse)
library(RColorBrewer)
library(patchwork)

3示例数据

本期就用大名鼎鼎的iris吧。

dat <- iris

4查看所有配色

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等。) ↘️ ➡️ ↗️

5详细查看

5.1 展示配色

熟悉了配色以后,你可能只想看一个配色方案,可以这样做:

display.brewer.pal(n = 8, name = 'Dark2')

5.2 获取色号

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

6应用配色

这里我们以ggplot绘图为例。

6.1 初步绘图

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

6.2 更改配色

这里我们以改变分组颜色为例,选用Dark2配色。

bp2 <- bp + scale_fill_brewer(palette = "Dark2")

sp2 <- sp + scale_color_brewer(palette = "Dark2")

bp2 + sp2

6.3 base绘图中的应用

这里补充一下再base绘图时如何应用brewer.pal函数。

barplot(c(4,10,11, 7), col = brewer.pal(n = 4, name = "RdBu"))

7颜色不够怎么办

Q: 细心的小伙伴可能发现了,这个配色最多的也才十几个,要是我需要的配色多于这个数怎么办呢?
A: ok~, 这里提供一下解决方案。

7.1 初步绘图

这里大家可以发现,用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

7.2 更多颜色

在我们的示例数据中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))

最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

分类:

后端

标签:

后端

作者介绍

jamesbang
V1

wx🔍: Grassssss 卷起来了