前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R tips: R中的颜色配置方案

R tips: R中的颜色配置方案

作者头像
生信菜鸟团
发布2021-12-01 17:42:41
3.7K0
发布2021-12-01 17:42:41
举报
文章被收录于专栏:生信菜鸟团

数据可视化不可避免的就是要选择一些颜色方案,颜色方案除了手动设置之外,在R中也有自动生成颜色方案的工具。

R中的HCL配色方案

HCL本意是和RGB HSV等一样的颜色空间的术语,由于这里所用的颜色方案在R中是hcl.pals函数,所以就称为HCL配色方案了。 HCL相比较HSV等颜色空间的一个重要优点就是颜色的视觉明度是均一的,在R中也是推荐使用hcl颜色方案,不推荐使用rainbow等颜色方案了。 有关于HCL的有点,可以参看https://jessieji.com/2020/hcl-instead-of-hsl。

hcl.pals可以查看内置的hcl颜色方案:

代码语言:javascript
复制
hcl.pals("qualitative")
# [1] "Pastel 1" "Dark 2"   "Dark 3"   "Set 2"    "Set 3"    "Warm"     "Cold"     "Harmonic" "Dynamic" 

hcl.pals("sequential")
# [1] "Grays"         "Light Grays"   "Blues 2"       "Blues 3"       "Purples 2"     "Purples 3"     "Reds 2"        "Reds 3"        "Greens 2"     
# [10] "Greens 3"      "Oslo"          "Purple-Blue"   "Red-Purple"    "Red-Blue"      "Purple-Orange" "Purple-Yellow" "Blue-Yellow"   "Green-Yellow" 
# [19] "Red-Yellow"    "Heat"          "Heat 2"        "Terrain"       "Terrain 2"     "Viridis"       "Plasma"        "Inferno"       "Rocket"       
# [28] "Mako"          "Dark Mint"     "Mint"          "BluGrn"        "Teal"          "TealGrn"       "Emrld"         "BluYl"         "ag_GrnYl"     
# [37] "Peach"         "PinkYl"        "Burg"          "BurgYl"        "RedOr"         "OrYel"         "Purp"          "PurpOr"        "Sunset"       
# [46] "Magenta"       "SunsetDark"    "ag_Sunset"     "BrwnYl"        "YlOrRd"        "YlOrBr"        "OrRd"          "Oranges"       "YlGn"         
# [55] "YlGnBu"        "Reds"          "RdPu"          "PuRd"          "Purples"       "PuBuGn"        "PuBu"          "Greens"        "BuGn"         
# [64] "GnBu"          "BuPu"          "Blues"         "Lajolla"       "Turku"         "Hawaii"        "Batlow"      

hcl.pals("diverging")
# [1] "Blue-Red"      "Blue-Red 2"    "Blue-Red 3"    "Red-Green"     "Purple-Green"  "Purple-Brown"  "Green-Brown"   "Blue-Yellow 2" "Blue-Yellow 3"
# [10] "Green-Orange"  "Cyan-Magenta"  "Tropic"        "Broc"          "Cork"          "Vik"           "Berlin"        "Lisbon"        "Tofino"  

hcl.pals("divergingx")
# [1] "ArmyRose" "Earth"    "Fall"     "Geyser"   "TealRose" "Temps"    "PuOr"     "RdBu"     "RdGy"     "PiYG"     "PRGn"     "BrBG"     "RdYlBu"  
# [14] "RdYlGn"   "Spectral" "Zissou 1" "Cividis"  "Roma" 

可以发现颜色方案分为四类:qualitative、 sequential、 diverging、 divergingx,分别取二个相应的Palettes看一下颜色的效果如何。

代码语言:javascript
复制
# 定义一个函数用于查看颜色的效果
showColors <- function(x, ...){
  barplot(rep(1, length(x)), col = x, axes = FALSE, ...)
}

选取hcl颜色方案是使用hcl.colors函数,比如从Pastel 1颜色方案中取10个颜色:

代码语言:javascript
复制
hcl.colors(10, palette = "Pastel 1")
# [1] "#FFC5D0" "#F6CBB7" "#E2D4A8" "#C5DCAB" "#A8E1BF" "#99E2D8" "#A4DDEF" "#C4D5FB" "#E4CBF9" "#F9C5E9"

showColors(hcl.colors(10, palette = "Pastel 1"), main = "Pastel 1")

四大配色方案中各随机选二个方案,查看效果:

代码语言:javascript
复制
# 布局4行2列
opar <- par(no.readonly = TRUE)
par(mfrow = c(4, 2), mar = c(1,1,3,1))

for(panel in c('qualitative', 'sequential', 'diverging', 'divergingx')){
  pal <- sample(hcl.pals(panel), 2)
  for(p in pal){
    col_in_pal <- hcl.colors(10, p)
    showColors(col_in_pal, main = paste0(panel, ": ", p))
  }
}

# 复原布局
par(opar)

可以看到:

  • qualitative颜色方案的颜色有多种色调,常用于着色离散变量;
  • sequential的颜色方案中色调较少,体现了颜色的连续过渡,可以用于着色连续变量;
  • diverging和divergingx也是颜色的连续过渡,但是不同于sequential,它的颜色在深浅上存在一个中心点,中心点两侧颜色逐步加深过渡,这样的颜色方案适合有中心点的连续变量,比如相关性数据:数据范围是-1到1,0是中心点,于是两端的颜色需要两个深色,而中心点可以使用最浅的颜色。

RColorBrewer

RColorBrewer包的配色方案通过display.brewer.all查看,可以发现它的颜色方案也是类似的:sequential、qualitative和diverging。

代码语言:javascript
复制
RColorBrewer::display.brewer.all()

如果需要获取具体的颜色,可以使用brewer.pal函数:

代码语言:javascript
复制
RColorBrewer::brewer.pal(3, "Dark2")
# [1] "#1B9E77" "#D95F02" "#7570B3" 

不同于hcl的配色方案,RColorBrewer中颜色方案数量是固定的,不会对颜色进行自动插值,比如Dark2配色一共只有8个颜色,超过8个颜色也最多只返回8个颜色:

代码语言:javascript
复制
RColorBrewer::brewer.pal(Inf, "Dark2")
# [1] "#1B9E77" "#D95F02" "#7570B3" "#E7298A" "#66A61E" "#E6AB02" "#A6761D" "#666666"
# Warning message:
# In RColorBrewer::brewer.pal(Inf, "Dark2") :
#   n too large, allowed maximum for palette Dark2 is 8
# Returning the palette you asked for with that many colors

如果需要对颜色进行插值可以使用colorRampPalette函数来实现,比如将Dark2配色线性插值成50个颜色:

代码语言:javascript
复制
par(mfrow = c(2, 1), mar = c(1,1,3,1))

dark2_cols <- RColorBrewer::brewer.pal(8, "Dark2")
showColors(dark2_cols)
showColors(colorRampPalette(dark2_cols)(50))

par(opar)

另外,ggplot2中修改color映射的scale_color_brewer和scale_fill_brewer也可以接受RColorBrewer的配色方案,自动调整颜色,比如:

代码语言:javascript
复制
library(ggplot2)
library(patchwork)

p <- ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) + geom_boxplot()
p2 <- p + scale_fill_brewer(palette = "Dark2")

p|p2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R中的HCL配色方案
  • RColorBrewer
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档