【R>>RColorBrewer】神仙函数colorRampPalette

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

推荐阅读更多精彩内容