ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
106 stars 30 forks source link

R语言画图 | 经典配色R包 RColorBrewer + ggsci + randomcoloR #5075

Closed ixxmu closed 3 months ago

ixxmu commented 3 months ago

https://mp.weixin.qq.com/s/idaOXbFFYw-BwJVy9pDRdw

ixxmu commented 3 months ago

R语言画图 | 经典配色R包 RColorBrewer + ggsci + randomcoloR by 被炸熟的虾

记录一些经典的配色方案,方便后续画图使用

RColorBrewer包

RColorBrewer算是最经典的调色板R包之一,内置3类调色板。可以使用brewer.pal.info函数查看所有调色板信息。

1、连续型 sequential:单渐变色,一种颜色由浅到深。共18组,每组9个渐变色梯度。

display.brewer.all(type = "seq")

2、离散型 divergent:双渐变色,一种颜色到另外一种颜色的渐变,即两端的颜色较深。共9组,每组11个颜色。

display.brewer.all(type = "div")

3、定性型 qualitative:区分色,几种区分度很高的颜色组合,适合标记分类数据。共8组,每组颜色812个不等。

display.brewer.all(type = "qual")

也可以使用display.brewer.pal(所取颜色的个数,"调色板名称")具体查看某一个调色板中的颜色。
使用brewer.pal函数提取不同分组颜色编号:
brewer.pal(9"Set1")
#[1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF" "#999999"
brewer.pal(12'Paired')[c(135)]
#[1] "#A6CEE3" "#B2DF8A" "#FB9A99"
colsBlues <- brewer.pal(9"Blues")
colsYlOrRd <- brewer.pal(9"YlOrRd")
colsSet1 <- brewer.pal(9"Set1")
colsSet2 <- brewer.pal(9"Set2")
colsSpectral <- brewer.pal(9"Spectral")
colsBrBG <- brewer.pal(9"BrBG")

统一筛选提取差异较大的颜色:

library(RColorBrewer) 
qual_col_pals <- brewer.pal.info[brewer.pal.info$category == 'qual',]
#处理后有74种差异还比较明显的颜色
col_vector <- unlist(mapply(brewer.pal,qual_col_pals$maxcolors, rownames(qual_col_pals))) 
pie(rep(1,length(col_vector)), col = col_vector)

ggsci包

ggsci包的功能如其名字所示,提供了多个来自科学期刊、数据可视化库、科幻电影和电视剧中的经典调色板。这些调色板可以通过两种方法调用:

1、scale函数

可以使用scale_colour_palname()/scale_fill_palname()函数直接取代ggplot2相应的配色函数,例如可以用scale_color_npg()调用Nature杂志风格配色,scale_fill_nejm()调用New England Journal of Medicine杂志风格配色。全部调色板见下文。
p1 <- ggplot(subset(diamonds, carat > 2.5 & depth > 50 & depth < 100),
       aes(x = table, y = price, colour = cut)) +
       geom_point(alpha = 0.7) +
       geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) +
       scale_color_npg() + labs(title = 'scale_color_npg') +
       mytheme
p2 <- ggplot(subset(diamonds, carat > 2.5 & depth > 50 & depth < 100),
       aes(x = depth, fill = cut)) +
       geom_histogram(colour = "black", binwidth = 1, position = "dodge") +
       scale_fill_nejm() + labs(title = 'scale_fill_nejm') +
       mytheme     

2、使用pal_palname函数提取具体颜色编码

例如提取Lancet杂志风格配色

#mypal <-  pal_lancet(palette = c("lanonc"), alpha = 1)
mypal <-  pal_lancet("lanonc", alpha = 0.7)(9#alpha调整透明度
mypal
## [1] "#00468BB2" "#ED0000B2" "#42B540B2" "#0099B4B2" "#925E9FB2" "#FDAF91B2"
## [7] "#AD002AB2" "#ADB6B6B2" "#1B1919B2"
library("scales")
show_col(mypal)
pal_npg("nrc", alpha = 0.7)(9)
pal_aaas("default", alpha = 0.7)(10)
pal_lancet("lanonc", alpha = 0.7)(9)
pal_nejm("default", alpha = 0.7)(8)
pal_jama("default", alpha = 0.7)(7)
pal_jco("default", alpha = 0.7)(10)
pal_ucscgb("lanonc", alpha = 0.7)(26)
......


全部颜色版:

randomcoloR

很简便的代码,很适合获取大批量颜色

library(randomcoloR)
#随机生成60种颜色,其实里面有重复的
mypalette <- randomColor(count = 60
#差异明显的60种
mypalette <- distinctColorPalette(60

生成渐变色

手工填充颜色梯度时很好用

start_color <- "red"
end_color <- "green"
# 创建离散渐变色调色板
discrete_palette <- colorRampPalette(c(start_color, end_color), 
                                       space = "Lab", interpolate = "linear")
# 生成渐变色向量
num_colors <- 60 # 可以根据需要更改生成的颜色数量
colors <- discrete_palette(num_colors)
# 输出结果
print(colors)
 # [1] "#FF0000" "#FD1B00" "#FC2900" "#FA3300" "#F93C00" "#F74400" "#F64A00"
 # [8] "#F45100" "#F35600" "#F15C00" "#F06100" "#EE6600" "#EC6A00" "#EB6F00"
# [15] "#E97300" "#E77700" "#E57B00" "#E37F00" "#E18300" "#DF8700" "#DD8B00"
# [22] "#DB8E00" "#D99200" "#D79500" "#D59900" "#D39C00" "#D0A000" "#CEA300"
# [29] "#CBA600" "#C9A900" "#C6AC00" "#C4B000" "#C1B300" "#BEB600" "#BBB900"
# [36] "#B8BC00" "#B5BF00" "#B2C200" "#AFC500" "#ABC800" "#A8CA00" "#A4CD00"
# [43] "#A0D000" "#9CD300" "#98D600" "#93D900" "#8FDB00" "#8ADE00" "#85E100"
# [50] "#7FE400" "#7AE600" "#73E900" "#6DEC00" "#65EF00" "#5DF100" "#54F400"
# [57] "#49F700" "#3BF900" "#29FC00" "#00FF00"


被炸熟的虾
自己的摸索,发现问题麻烦告诉作者,光速回来改正