R语言可视化及作图3--图形颜色选取


R语言绘图系列:


R语言色彩丰富,有600多种颜色可供选择。
在这里介绍七种R语言图形颜色选取方法:
1. RcolorBrewer包;⚠️
2. paletteer包;⚠️
3. pallette函数;
4. 颜色生成器函数;
5. rgb函数;
6. hsv函数和hcl函数;
7. Colourpicker包

1. RcolorBrewer包

RcolorBrewer官网:https://www.r-graph-gallery.com/38-rcolorbrewers-palettes.html

  • 1.1连续型
 library(RColorBrewer)
display.brewer.all(type = 'seq') #查看包中的颜色(连续型)
age <- rnorm(100,45,10)
hist(age,col=brewer.pal(9,'BuGn')) #brewer.pal就是调色盘的意思,后面参数是从'BuGn'中选择9种颜色。
  • 1.2 极端型
display.brewer.all(type = 'div')
age <- rnorm(100,45,10)
hist(age,col=brewer.pal(11,'PiYG'))
  • 1.3 离散型
display.brewer.all(type = 'qual')
age <- rnorm(20:100,10)
hist(age,col=brewer.pal(10,'Pastel2'))
  • ⚠️⚠️⚠️在这个包的使用中,最值得注意的是它的核心函数colorRampPalette
    colorRampPalette 函数支持自定义的创建一系列的颜色梯度
colors <- colorRampPalette(c("blue", "red"))(16)
colors
# [1] "#0000FF" "#1100EE" "#2200DD" "#3300CC" "#4400BB" "#5500AA"
# [7] "#660099" "#770088" "#880077" "#990066" "#AA0055" "#BB0044"
#[13] "#CC0032" "#DD0021" "#EE0010" "#FF0000"
scales::show_col(colors)
函数的参数c("blue", "red") 指的是颜色从蓝色渐变到红色,16代表创建长度为16的颜色梯度。有了颜色梯度之后,我们就可以方便的把数值映射到颜色梯度上。基本的思想是,将数值排序,然后得到每个数值在排序好的序列中的顺序,其实就是rank 函数的返回值,然后利用该顺序去获取颜色

非常适用于ggplot2绘图时填充颜色不够的情况

附一个好用的配色网站:https://emilhvitfeldt.github.io/r-color-palettes/discrete.html

2. paletteer包

优点:
1. 使用简单,可以直接在控制台显示出颜色
2. 无缝对接ggplot❗️

2.1 安装:
install.packages("paletteer")
# install.packages("devtools")
# devtools::install_github("EmilHvitfeldt/paletteer")
library(paletteer)
2.2 使用:

paletteer支持两类配色:
paletteer_c:连续型配色,映射颜色的那一列是一串连续的数据,最常见的连续型数据就是数值,举个栗子:
paletteer_d:离散型配色,映射颜色的那一列有固定几个的取值,每个取值对应一个颜色。
离散型配色中还有个paletteer_dynamic,即动态配色,就是说可以把一组颜色任意切分成n个颜色,取决于你想要多少种颜色,要多少就有多少。

下面是使用方法,将配色以十六进制编码的形式输出出来,成为一个自定义颜色时可直接使用的向量。并且这个输出在控制台上就显示了颜色,非常直观

paletteer_c("scico::berlin", n = 10)
## <colors>
## #9EB0FFFF #5AA3DAFF #2D7597FF #194155FF #11181DFF #270C01FF #501802FF #8A3F2AFF #C37469FF #FFACACFF
paletteer_d("RColorBrewer::Paired")
## <colors>
## #A6CEE3FF #1F78B4FF #B2DF8AFF #33A02CFF #FB9A99FF #E31A1CFF #FDBF6FFF #FF7F00FF #CAB2D6FF #6A3D9AFF #FFFF99FF #B15928FF
paletteer_dynamic("cartography::green.pal", 5)
## <colors>
## #B8D9A9FF #8DBC80FF #5D9D52FF #287A22FF #17692CFF
paletteer_dynamic("cartography::green.pal", 10)
## <colors>
## #C7E0B9FF #B1D2A4FF #9CC590FF #87B77BFF #70A965FF #54974AFF #38852FFF #257322FF #1B6122FF #125022FF 

引号里是包名::配色名,并不需要自己去查,直接按tab键即可

2.3 对接ggplot2
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point() +
  scale_color_paletteer_d("basetheme::minimal")
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Sepal.Width)) +
  geom_point() +
  scale_color_paletteer_c("grDevices::PinkYl")

这样的对接方式,基于ggplot2的所有R包都可以用了。比如ggpubr

2.4 对接其它R包
  • pheatmap
pheatmap::pheatmap(volcano,color = paletteer_c("scico::berlin", n = 100))
  • ComplexHeatmap
library(ComplexHeatmap)
Heatmap(t(iris[,1:4]),col = paletteer_c("scico::berlin", n = 100),name = "iris")

参考:https://github.com/EmilHvitfeldt/paletteer

3. pallette函数

pallette()函数仅有一个参数,该参数接受一个表示颜色的向量。如果不对该参数进行改变,其默认颜色为:

palette()
[1] "black"   "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710"
[8] "gray62" 

当需要重制调色板时,可以对value参数进行更改。比如:palette(rainbow(7)),表示将调色板换成7种彩虹色。调色板用完之后其参数不会自动恢复默认,可以使用palette('default')恢复默认。或者和par函数一样,先将palette()赋给一个对象,最后再将这个对象释放出来。

4. 颜色生成器函数

函数 功能 用法
rainbow() 生成彩虹色 rainbow(n,s=1,v=1,start=0,end=max(1,n-1)/n,gamma=1),n表示产生颜色个数,s和v分别表示颜色的饱和度和纯度。start和end表示设定彩虹色的子集,而颜色将从这个子集中选取,子集的分界线为:红色0;黄色1/6;绿色2/6;青色3/6,蓝色4/6;紫红色5/6。gamma参数表示gamma调整。
heat.colors() 生成暖色 从红色渐变到黄色再到白色
terrain.colors() 生成土色 从绿色渐变到黄色再变到棕色
topo.colors() -- 从蓝色渐变到青色再到黄色最后是棕色
cm.colors() -- 从青色到白色再到粉色
gray() 和 grey() 生成灰色 grey(level,alpha=NULL),level表示生成灰色的程度,0为纯白,1为纯黑,可接受一个向量,即产生一个从白渐变到黑的颜色向量。

5. rgb函数

rgb(red,green,blue,alpha,names=NULL,maxColorValue=1)
这个函数是red,green,blue的首字母组合。顾名思义,这个调色桶是基于红绿蓝三种颜色的混合。前三个参数表示要在这个调色桶中加入多少成分的红绿蓝,取值再0~maxColorValue之间。默认情况下,maxColorValue的值是1,因此前三个参数取值都在0~1之间,值越大表示该颜色加的越多。alpha表示颜色的透明度。names参数比较少用,用于对生成的颜色进行命名。

6. hsv函数和hcl函数

hsv(h=1,s=1,v=1,alpha)
这个函数是hue,saturation和value的首字母组合,表示用色调,饱和度和纯度来构建颜色。前三个参数取值是0-1,alpha表示透明度。
hcl(h=0,c=35,l=85,alpha,fixup=TRUE)
这个函数是hue,chroma和luminance的首字母组合,表示用色调,色度和亮度来构建颜色。

7. Colourpicker包

#安装
#To install the stable CRAN version:
install.packages("colourpicker")
#To install the latest development version from GitHub:
install.packages("remotes")
remotes::install_github("daattali/colourpicker")

更像是RStudio的一个插件,下载之后使用时无需加载。
(安装后会出现在RStudio的Addins中)

plot(1:5,col=CPCOLS)

选中上述代码,在Addins中点Plot Colour Helper,在跳出的面板中选择颜色。选择好后点done,在RStudio中运行选中的颜色即可。

8. 配色参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容