欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[R>>RColorBrewer] fairy function colorRampPalette

最编程 2024-03-20 19:12:48
...

首先声明下面整理的内容都来自于网络,并在文末注明了引用的出处,本内容仅用于学习交流,禁止用于商业用途,如有侵权,请联系删除。
目前自己常用的调色R包有:

  • ggsci
  • RColorBrewer
    之前已经简单学习过ggsci,这次来探讨下RColorBrewer包。

基础知识

常用的配色方式有RGB和CMYK。
RGB:一种发光的色彩模式,你在一间黑暗的房间内仍然可以看见屏幕上的内容;
CMYK:一种依靠反光的色彩模式,我们是怎样阅读报纸的内容呢?是由阳光或灯光照射到报纸上,再反射到我们的眼中,才看到内容。它需要有外界光源,如果你在黑暗房间内是无法阅读报纸的。
从理论上来说,只需要CMY三种油墨就足够了,它们三个加在一起就应该得到黑色。但是由于目前制造工艺还不能造出高纯度的油墨,CMY相加的结果实际是一种暗红色。因此还需要加入一种专门的黑墨来调和。所以CMYK是利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:

C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:Key Plate(blacK) = 定位套版色(黑色)


颜色代码是十六进制的,分别是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F表示,越往左越靠近黑色,往右越靠近红色。
颜色代码前两位是红色(Red),中间两位代表绿色(Green),后两位是蓝色(Blue)。
因此,红色:FF0000; 绿色:00FF00; 蓝色:0000FF。

RColorBrewer概述

核心函数:

  • display.brewer.all()
  • brewer.pal.info
  • display.brewer.pal(9,"Paired")
  • brewer.pal(9,"Paired")[3:8]:选择亚组中的颜色
library(RColorBrewer)
display.brewer.all() #显示所有调色板

可以看出其调色板可分为3类,到底具体是哪三类?

brewer.pal.info #返回画板名称,最大颜色数等,以文本的形式展示
table(brewer.pal.info$category) #查看画板情况


综上所述,RColorBrewer共提供了3类调色板,并可以用brewer.pal()生成需要的颜色,这3类包括:

  • 连续型sequential:共18组颜色,每组9个渐变色。
  • 离散型diverging:共9组颜色,生成深色强调两端、浅色标识中部的系列颜色。
  • 定性型qualitative:共9组颜色,生成一系列彼此差异比较明显的颜色,通常用来标记分类数据。
display.brewer.all(type = "div")
display.brewer.all(type = "qual")
display.brewer.all(type = "seq")

如果只看其中一组的颜色,用display.brewer.pal()查看。

display.brewer.pal(9,"Paired")

colorRampPalette

下面来介绍RColorBrewer的神仙函数colorRampPalette
核心函数:

  • colorRampPalette(brewer.pal(9,"Set1"))(n)
    下面直接实战:
library(RColorBrewer)
lp <- data.frame(city=c("全国","江苏","广东", "浙江","全球平均","中高收入","美国","英国","德国","高收入","日本"),
                 value=c(77,78,78,80,73,76,79,81,81,81,84))
lp$city <- factor(lp$city,levels = lp$city)

ggplot(lp,aes(city,value,fill=city))+
  geom_bar(stat="identity",width=0.5)+
  geom_text(aes(label=value),size=4,color="black",fontface="bold",hjust=-0.5)+
  theme_bw()+
  ylim(c(0,100))+
  labs(x="",y="")+
  theme(legend.position = "",
        axis.text = element_text(face = "bold",size=16))+
  coord_flip()+
  scale_fill_brewer(palette = "Set1")


上图中有11个组别,但是“Set1”只有9种颜色,怎么处理这个情况呢?
这个时候神仙函数colorRampPalette该来救场了,咱们只需要给colorRampPalette点颜色,就可以从里面任意取色了。

x <- colorRampPalette(c("royalblue","firebrick3"))(12)
scales::show_col(x)
y <- colorRampPalette(c("royalblue","white","firebrick3"))(56)
scales::show_col(y)

还可以让颜色更深些:

scales::show_col(colorRampPalette(c(rep("royalblue",3),"white",rep("firebrick3",3)))(56))

ColorCount <- length(unique(lp$city))
getPalette <- colorRampPalette(brewer.pal(9,"Set1"))
scales::show_col(getPalette(ColorCount))

![](https://upload-images.jianshu.io/upload_images/17982813-264bbcee014baefb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

ggplot(lp,aes(city,value,fill=city))+
geom_bar(stat="identity",width=0.5)+
geom_text(aes(label=value),size=4,color="black",fontface="bold",hjust=-0.5)+
theme_bw()+
ylim(c(0,100))+
labs(x="",y="")+
theme(legend.position = "",
axis.text = element_text(face = "bold",size=16))+
coord_flip()+
scale_fill_manual(values = getPalette(ColorCount))

![](https://upload-images.jianshu.io/upload_images/17982813-70b124e5515919ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

原来`brewer.pal(9,"Set1")`的9种颜色,经过`colorRampPalette`的变换,神奇的达到了11种元素的需求。

参考链接:
医学统计与R语言:ggplot中填充颜色不够怎么办?(公众号:医学统计与R语言)
[R语言绘图的颜色:两包](https://zhuanlan.zhihu.com/p/37020820)
[R 调色—Palette](https://zhuanlan.zhihu.com/p/75529389)