查看原文
其他

R语言可视化——ggplot图表配色技巧

2016-10-07 小魔方 数据小魔方

今天跟大家分享ggplot图表的配色原理与基本技巧。


图表配色是一个很深奥的话题,多亏了R语言平台的众多开发者贡献的配色包,让图表的配色不再深不可测。


这里我暂且将所有的配色场景划分为两类:


离散变量配色与连续变量配色


ggplot函数的配色机制相对来说比较智能,当你给colour或者fill属性指定给变量映射的时候,该函数就会自动的区分变量属性(是离散变量或者是连续变量),进而给出适用于两种情况的配色风格。


ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()




ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()




大家可以对比以上两句代码:我并没有指定任何实际的颜色,只是将colour颜色属性指定给离散变量cut或者连续变量depth,而输出的图表已经完成了默认的离散颜色映射和连续颜色渐变映射。


对于以上两种类型颜色使用场景,如果是要自行修改,则需要自行定义颜色标度:


离散颜色标度:


scale_colour_XXX:


这里最经常适用的三种情况


第一种情况,使用ggthemes包中的颜色主题,其中有些非常流行的颜色主题,如经济学人的主题scale_colour_economist()、scale_colour_wsj(),还有excel的主题、tableau主题以及stata主题。


第二种情况,可以使用RColorBrewer包中的配色卡,以下是该包scale_colour_brewer()函数所允许使用的所有离散颜色色卡。


该配色系统方案给予我们三种关于分类变量的配色场景:





同色系方案,即在同一个色系中均匀取出若干个色段,用于分类变量填充,最终呈现的效果,看起来非常清爽,图中最上面的一排颜色均为此类。(适用于表达有序因子分类变量,比如GDP的分段呈现等)


二分色系方案,即两个色系方向平滑过渡,均匀取值,中间色一般为白色或者淡色。(适用于表达含有正负值的分类数量段,譬如增长率指标、利润率等)


多分类不同色系方案,取不同色系相对协调的一组颜色,这种情况比较适合用于表达仅作分类,分类项之间没有顺序和大小的普通情况。


以上色卡以及配色包是由一个著名的专做地图可视化配色方案的团队所开发的,网址如下,提供在线配色并免费下载服务。(网站可能被屏蔽,如无法打开需要使用VPN)


http://colorbrewer2.org/#


当然第三种就是自己DIY了,R支持直接调用可识别的颜色名称以及颜色代码(16进制代码)。


scale_fill_manual(values=c("#FB882C","#5B88A0"))


或者


scale_fill_manual(values=c("Linen","Peru","PeachPuff","SandyBrown","Chocolate"))



而针对连续型变量颜色修改的情况,可探讨的余地不多:


scale_fill_gradient()


scale_fill_gradient2()


scale_fill_gradient()允许分配一组双色连续渐变,low="white",high="red"

scale_fill_gradient2()允许分配一组三色连续渐变,low="blue",mid="white",high="red"



接下来针对以上几种情况,我分别演示一个案例:



library("ggthemes")

library("RColorBrewer")



离散型:


###使用ggthemes包中的颜色主题(华尔街日报的主题色模板)

ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_wsj()




###使用RColorBrewer包中的配色卡

ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_brewer(palette="Greens")




###使用DIY方式自己制作配色卡


ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+scale_colour_manual(values=c("#84CEFC","#ACDAE4","#5C9EA4","#04FEFC","#4CD2CC"))




连续型:


双色渐变:



ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()+scale_colour_gradient(low="white",high="Blue")





三色渐变:


ggplot(diamonds,aes(carat,price,colour=depth))+geom_point()+scale_colour_gradient2(low="#8E0F2E", mid="#BFBEBE", high="#0E4E75")



以上就是R中最常用到的配色技巧,可以满足我们大部分使用场景的需求。


魔方学院QQ群:


QQ群:

微信群:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存