首先声明下面整理的内容都来自于网络,并在文末注明了引用的出处,本内容仅用于学习交流,禁止用于商业用途,如有侵权,请联系删除。
目前自己常用的调色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://img.haomeiwen.com/i17982813/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://img.haomeiwen.com/i17982813/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)
网友评论