R语言颜色综合运用与色彩方案共享

Wesley13
• 阅读 826

今天这篇主要讲解R语言颜色综合运用,主要跟大家介绍如何提取那些专业色彩包中的颜色搭配用于在基础绘图系统和高级绘图系统中共享。

其实无论是R语言的预设配色系统、自定义颜色表还是哪些专属配色包,我们所使用(或者R语言识别的)的仅仅就是一组字符向量所代表的色值而已,并不神秘。

通过scales中的色彩获取函数,我们可以将专属配色主题(RColorBrewer、ggthemes)中的配色主题提取出来,以函数的形式传递给基础绘图系统(plot)以及ggplot绘图系统。

本文按照三部分进行讲解:

  • RColorBrewer部分:

  • ggthemes部分:

  • scales::brewer.pal运用:

RColorBrewer部分


关于RColorBrewer包之前在写ggplot函数系统的时候已经有所涉猎,其中专门讲解过它的官方配色网站:http://colorbrewer2.org/#

这是一个非常神奇的网站,RColorBrewer包中的配色方案全部来源于此,而且网站上允许自定义色彩序列和类型,衍生出来的颜色要比该包中的配色资源多出很多倍。

library(RColorBrewer)

display.brewer.pal(n, name)

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

ColorBrewer设计团队将配色方案分为三种:

  • seq:连续渐变色

  • div:双向渐变色

  • qual:分类色

通过display函数可以查看不同类型的色板:

颜色查看:

display.brewer.all(type = "all")  #查看所有色板

display.brewer.all(type = "seq")  #查看单色渐变色板

display.brewer.all(type = "div")  #查看双色渐变色板

display.brewer.all(type = "qual") #查看离散(分类)色板

R语言颜色综合运用与色彩方案共享

R语言颜色综合运用与色彩方案共享

R语言颜色综合运用与色彩方案共享

R语言颜色综合运用与色彩方案共享

以上通过display四个函数成功显示了全部色板、单色渐变色板、双色渐变色板、离散(分类)色板

当然你也可以通过display.brewer.pal(n, name)函数显示指定名称的颜色主题:

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

R语言颜色综合运用与色彩方案共享

par(mfrow=c(1,5),mar=c(1,1,2,1),xaxs="i", yaxs="i")

mycolors<-brewer.pal(9, "BuGn")

barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of BuGn ")

mycolors<-brewer.pal(9, "OrRd")

barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of OrRd")

mycolors<-brewer.pal(9, "YlGn")

barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of YlGn")

mycolors<-brewer.pal(9, "Oranges")

barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of Oranges")

mycolors<-brewer.pal(9, "Blues")

barplot(rep(1,times=9),col=mycolors,border=mycolors,axes=FALSE, horiz=T,main="MyColors of Blues")

dev.off()

R语言颜色综合运用与色彩方案共享

大家已经看到了,通过brewer.pal(n, "name")函数,可以很轻松的提取出你想要的配色主题。

如果你想要某个配色主题的其中几个色值,可使用如下方式提取:

display.brewer.pal(6, "BuGn")#按顺序提取前六个

R语言颜色综合运用与色彩方案共享

如果想要提取某一组色彩主题不连续的颜色,可以使用文本函数:

library(scales)

a<-brewer.pal(9, "BuGn")

show_col(a[c(1,3,5,7,9)],labels=F)

R语言颜色综合运用与色彩方案共享

通过向量合并,你还可以自己从色彩包中自定义色彩方案。

b1<-brewer.pal(9, "BuGn");b2<-brewer.pal(9,"Blues")

c<-c(b1[c(1,3,5,7,9)],b2[c(2,4,6,8)])

show_col(c,labels=F)

R语言颜色综合运用与色彩方案共享

其实都是些很简单的文本函数组合,毕竟色彩方案在软件中也就是一组字符向量而已。

以上这些色彩方案可以很容易的应用到基础绘图系统和ggplot绘图系统中。

c<-c(50,30,50,70,90,40)

names(c)<-LETTERS[1:6]

mycolor<-brewer.pal(9,"Greens")

pie(sort(c,decreasing=T),labels=names(c),col=mycolor[c(3,5,5,6,7,9)],clockwise=T,radius=1,border=F)

R语言颜色综合运用与色彩方案共享

library(ggplot2)

library(plyr)

mydata<-data.frame(c)

ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+

geom_bar(stat="identity",width=1,col="white")+

coord_polar(theta = "y",start=0)+

theme(panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank())+

scale_fill_brewer(palette="Greens",labels=c("E", "D", "A","C","F","B"))+

guides(fill=guide_legend(reverse=TRUE,title=NULL))

R语言颜色综合运用与色彩方案共享

ggthemes部分:


接下来讲解ggthemes部分,其实ggthemes包原本是转为ggplot2包开发的辅助包(前面加的前缀——gg就可以看出来,这种包还有很多),里面提供了大量高质量的主题、颜色方案。其中就有我们所熟知的economist主题方案以及wsj方案,还有诸如stata、excel、tableau、solarized、tufte等主题方案。

ggthemes包中的色彩方案都是打包好,命名过的,所以我们引用的时候,只需赋值即可。

这里以economist和WSJ为例:

library(ggthemes)

m1<-economist_pal()(6)

show_col(m1)

R语言颜色综合运用与色彩方案共享

mycolor<-m1<-economist_pal()(5)

pie(sort(c,decreasing=T),labels=names(6),col=mycolor,border=F,clockwise=T,init.angle=90,radius=1)

R语言颜色综合运用与色彩方案共享

ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+

geom_bar(stat="identity",width=1,col="white")+

coord_polar(theta = "y",start=0)+

theme(panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank())+

scale_fill_economist(labels=c("E", "D", "A","C","F","B"))+

guides(fill=guide_legend(reverse=TRUE,title=NULL))

R语言颜色综合运用与色彩方案共享

m2<-wsj_pal()(6)

show_col(m2)

R语言颜色综合运用与色彩方案共享

mycolor<-m1<-wsj_pal()(6)

pie(sort(c,decreasing=T),labels=names(c),col=mycolor,border=F,clockwise=T,init.angle=90,radius=1)

R语言颜色综合运用与色彩方案共享

ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+

geom_bar(stat="identity",width=1,col="white")+

coord_polar(theta = "y",start=0)+

theme(panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank())+

scale_fill_wsj(labels=names(c))+

guides(fill=guide_legend(reverse=TRUE,title=NULL))

R语言颜色综合运用与色彩方案共享

其实关于economist和wsj的配色主题远不止这些元素,里面规定了详细的序列用色标准、线条用色标准、形状标准和背景色参考方案,这些信息,你可以通过使用ggthemes_data函数进行查看:

#WSJ背景色

ggthemes_data$wsj$bg

gray     green      blue     brown

"#efefef" "#e9f3ea" "#d4dee7" "#f8f2e4"

#WSJ主题色

ggthemes_data$wsj$palettes   #主题色

$rgby

yellow       red      blue     green

"#d3ba68" "#d5695d" "#5d8ca8" "#65a479"

$red_green

green       red

"#088158" "#ba2f2a"

$black_green

black      gray   ltgreen     green

"#000000" "#595959" "#59a77f" "#008856"

$dem_rep

blue       red      gray

"#006a8e" "#b1283a" "#a8a6a7"

$colors6

red      blue      gold     green    orange     black

"#c72e29" "#016392" "#be9c2e" "#098154" "#fb832d" "#000000"

#economist背景色:

ggthemes_data$economist$bg

#economist主题色:

ggthemes_data$economist$fg

也可以使用scales包中的show_col函数进行颜色的图形化输出:

显示主题颜色:

《华尔街日报》

show_col(ggthemes_data$wsj$bg)                      #背景色

show_col(ggthemes_data$wsj$palettes$rgby)           #rgby

show_col(ggthemes_data$wsj$palettes$red_green)      #red_green

show_col(ggthemes_data$wsj$palettes$black_green)    #black_green

show_col(ggthemes_data$wsj$palettes$dem_rep)        #dem_rep

show_col(ggthemes_data$wsj$palettes$colors6)        #colors6

《经济学人》

show_col(ggthemes_data$economist$bg)                #背景色

show_col(ggthemes_data$economist$fg)                #主题色

show_col(ggthemes_data$economist$stata)             #基于stata的配色方案

以上ggthemes包中的所有颜色,你都可以通过names_pal()(n)的格式进行提取,然后使用文本函数进行抽取、转化、合并,自由搭配出属于自己的专属配色方案

scales包的brewer_pal函数:


接下来的时间我会将全部精力放在brewer_pal函数上,告诉你为什么,因为这个函数是scales专门为图形标度所设置的颜色设置函数,而以上我们所述的RColorBrewer里面的brewer.pal以及ggthemes包中的names_pal函数,是用于提取自己的配色方案,适用范围较小。

library("scales")

brewer_pal(type = "seq", palette = 1, direction = 1)

该函数直接对接RColorBrewer包中的配色主题,但是增加了一些输出参数,可以对输出的主题进行更加灵活的自定义操作。

type设置颜色种类,palette设置色板(可以是字符名称,也可以是编号),direction设置颜色输出顺序(默认为原始顺序,-1代表倒序,对于连续渐变类型的色板比较重要)。

show_col(brewer_pal()(10))

show_col(brewer_pal("div")(5))

show_col(brewer_pal(palette = "Greens")(5))

R语言颜色综合运用与色彩方案共享

R语言颜色综合运用与色彩方案共享

R语言颜色综合运用与色彩方案共享

可以看出来,brewer_pal()函数允许通过色板类型、色彩数据、主题类型进行筛选输出。

我们可以通过brewer_pal函数将色彩信息传递给指定向量,或者直接将brewer_pal指定给col或者fill等图表中的标度参数。

par(mfrow=c(1,2),mar=c(1,1,2,1),xaxs="i", yaxs="i")

pie(rep(1,times=6),labels="",col=brewer_pal(palette="Greens")(6),border=F,radius=1,clockwise=T)

pie(rep(1,times=6),labels="",col=brewer_pal(palette="Greens",direction =-1)(6),border=F,radius=1,clockwise=T)

R语言颜色综合运用与色彩方案共享

因为ggplot中有专用于RColorBrewer的色彩主题函数scale_fill(colour)_brewer(),用于对接RColorBrewer中的色彩库,所以我们想要在ggplot图表系统中使用RColorBrewer中的配色主题,不必使用brewer_pal进行提取。

并且,brewer_pal函数内的参数,在scale_fill(colour)_brewer()函数内也可以使用,对色彩方案进行筛选、抽取。

library(Rmisc)

library(lattice)

p1<- ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+

geom_bar(stat="identity",width=1,col="white")+

coord_polar(theta = "y",start=0)+

theme(panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position="top")+

scale_fill_brewer(palette="Greens",labels=names(c))+

guides(fill=guide_legend(reverse=TRUE,title=NULL))

p2<- ggplot(data=mydata,aes(x=factor(1),y=c,fill=factor(c),order=desc(c)))+

geom_bar(stat="identity",width=1,col="white")+

coord_polar(theta = "y",start=0)+

theme(panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position="top")+

scale_fill_brewer(palette="Greens",direction =-1,labels=names(c))+

guides(fill=guide_legend(reverse=TRUE,title=NULL))

multiplot(p1,p2,cols=2)

R语言颜色综合运用与色彩方案共享

除此之外,还有一个叫ggtech的包,专门为ggplot2包提供科技公司风格配色方案。仔细看了包,没有取色函数,但是提供了全部的色值信息。

library(ggtech)

tech_key = list(airbnb = c("#FF5A5F","#FFB400", "#007A87", "#FFAA91", "#7B0051"),

facebook = c("#3b5998","#6d84b4", "#afbdd4", "#d8dfea"),

google = c("#5380E4", "#E12A3C", "#FFBF03","#00B723"),

etsy = c("#F14000", "#67B6C3", "#F0DA47", "#EBEBE6", "#D0D0CB"),

twitter = c("#55ACEE", "#292f33", "#8899a6", "#e1e8ed"))

show_col(tech_key$airbnb)

show_col(tech_key$facebook)

show_col(tech_key$google)

show_col(tech_key$etsy)

show_col(tech_key$twitter)

R语言颜色综合运用与色彩方案共享

以上是今天所要讲的主要内容,因为关于这块儿的内容,非常丰富,我也只能涉略一点儿,想要了解更多的R语言配色知识,可以参考详细的官方文档。

其实这一系列内容还有一个姊妹篇(上篇《R预设配色系统及自定义色板》),推送在小魔方的个人公众号——“数据小魔方”上,主要内容是关于R语言预设的配色系统和目前可以调用的自定义颜色的调取与组合、转换等信息。如果你想要了解详情的话,可以去那里查看,阅读原文可以直达。

点击原文阅读该篇内容的姊妹篇:《R预设配色系统及自定义色板》

我是分割线~


欢迎关注魔方学院QQ群:

QQ群:

微信群:

R语言颜色综合运用与色彩方案共享

本文分享自微信公众号 - 数据小魔方(datamofang)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
R语言可视化——数据地图应用(东三省)
今天是一个案例应用,采用东北三省地图进行离散颜色映射,让大家感受下R语言在地理信息空间可视化方面的强大功能,同时也会对之前强调过的地图配色技巧进行应用。加载工具包:library(ggplot2)   绘图函数library(plyr)     数据合并工具library(maptools
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
!(https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png)PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所.<?php$apparray('db_prefix''
Wesley13 Wesley13
2年前
R语言相关关系可视化函数梳理(附代码)
当考察多个变量间的相关关系时,通常将多个变量的两两关系以矩阵的形式排列起来,R提供了散点图矩阵、相关矩阵等多种可视化方案,囊括了众多函数。本文对R语言相关关系可视化的函数进行了初步梳理(全篇框架如下),后续大家可根据个人需求及函数功能择优选择。!ca2a37780049afa7173657f022b8b242bc816d00(https://yqfi
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这