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

浏览: 1756

今天跟大家分享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色值的还原。


推荐 2
本文由 EasyCharts 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册