R语言可视化——图表美化与套用配色主题

2020-06-16 00:00:00 数据 主题 图表 华尔街 配色
作者:EasyCharts 我们是一群专注数据分析与可视化逗逼青年!
个人公众号:EasyCharts
出处:R语言可视化——图表美化与套用配色主题

今天跟大家分享R语言中ggplot2包的配套配色主题包:ggthemes。

因为单独使用代码来调整单个图表元素,实在是太费劲了,更何况图表的细节元素有那么多,每一个都要单独写一句代码,即便简化后,也是一笔很大的工作量。

所以R社区的开发者就创造出了图表主题包这种半成品的图表模板,通过基础图表输出+套用订制主题来达到高效图表美化的目标。

这里为了图表效果佳,我不用内置数据集,直接使用代码生成数据框:

data<-data.frame(

conpany=c("Apple","Google","Facebook","Amozon","Tencent"),

Revenue=c(5000,3500,2300,2100,3100))


以上使用函数生成了2015年五个互联网公司的年度营业额数据(数据纯属虚构,无从考证)数据指标。

然后加载我们需要的做图包:特别是grid和ggthemes包将是我们调整与美化图表的主要支撑。

library(ggplot2)

library(ggthemes)

library(grid)

下面我们就可以直接使用ggplot作图了,大家应该还记得之前的柱形图语法吧:


ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+

geom_bar(stat="identity")


ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+
geom_bar(stat="identity")+
labs(x="Company",y="The Revenue of 2015($)")+
ggtitle("The Financial Performance of five giant")

坦白的说,这个图表足够精准、简洁、实用,无论是用在论文里还是用在报告中,都没有太大问题,至少是不算难看。

可是既然有能做的更美,而又不会浪费太多时间的方法,为啥不用呢~

接下来就是ggthemes包的定制主题大展拳脚的时候了~

我们用以上图表的初代码再加上特定主题,效果一下子六上天!

主题:theme_bw()

ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+

geom_bar(stat="identity")+

labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_bw()



主题:theme_wsj()

ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+

geom_bar(stat="identity")+labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_wsj()


主题+颜色主题:theme_wsj()+scale_fill_wsj("rgby", "")


ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity")+

labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_wsj()+

scale_fill_wsj()


以上图表套用华尔街日报的主题模板和配色模板,看起来已经很完美了,但是图表中依然有很多不完美的地方,比如刻度线太短、单序列却添加了多余的图例、字体不太符合我们的审美。

下面一个一个解决:

ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity")+

labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_wsj()+scale_fill_wsj()+

geom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+

theme(legend.position='none',axis.ticks.length=unit(0.5,'cm'))


以上过程在使用华尔街日报主题及配色包的同时,添加了我们需要的数据标签、删除了图例、同时加长了刻度线等图表元素。

其实以上所用到的图表主题内仍然是可以添加可选参数的:

ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity")+labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_wsj(color="gray")+scale_fill_wsj("rgby", "")+

geom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+

theme(legend.position='none',axis.ticks.length=unit(0.5,'cm'))


当然,如果我们找到了更好的一组配色,我们也可以仅仅使用华尔街日报的主题,而使用我们自己准备好的调色板:

ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity")+labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_wsj()+

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

geom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+

theme(legend.position='none',axis.ticks.length=unit(0.5,'cm'))


当你厌倦了华尔街日报的风格的时候,你也可以试一试经济学人的风格主题:

ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity")+labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_economist(base_size=14)+

scale_fill_economist()+

geom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+

theme(legend.position='none',axis.ticks.length=unit(0.5,'cm'))


如果你觉得柱形图的数据条间距太宽,也可以通过在在geom_bar()中利用width参数进行自定义修改。

ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+

geom_bar(stat="identity",width=0.65)+labs(x="Company",y="The Revenue of 2015($)")+

ggtitle("The Financial Performance of five giant")+

theme_economist(base_size=14)+scale_fill_economist()+

geom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+

theme(legend.position='none',axis.ticks.length=unit(0.5,'cm'))



其实无论怎么样,虽然套用行业水平的主题可以节省我们很多作图时间,提升作图效率,但是毕竟与自己部门或者企业的风格相差甚远,如果是所在的企业比较重视企业形象或者强调品牌概念的话,好还是在别人的主题基础上,针对业务要求再做一些局部调整,这样才能即吸收别家的长处,又兼顾自己的特色。


其实以上华尔街日报和经济学人风格的色板是可以通过代码显示整个配色模板的:

library(scales)

经济学人色板

show_col(economist_pal()(6))


华尔街日报色板:

show_col(wsj_pal()(6))


以上颜色色值是用HEX格式显示的,你可以使用colorpix插件后者直接使用PPT中的取色器插件进行 RBG色值的还原。

官方公众号:R语言中文社区 (ID:R_shequ) 欢迎关注,持续连载。

相关文章