R语言可视化——图表美化与套用主题(下)

昨天的分享跟大家简单介绍了关于柱形图图表元素美化的思路,今天接着分享关于套用主题。

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

所以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=0.65参数进行自定义修改。

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'))

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

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2016-09-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信宝典

高通量数据分析必备|基因组浏览器使用介绍 - 1

基因组浏览器是高通量测序分析的一个重要的可视化工具。相比于最终提供的表格,基因组浏览器可以提供更多的信息,如直观展示突变位点、查看有无新转录本或新的可变剪接形式...

1722
来自专栏生信技能树

【直播】我的基因组59:CNV初步探索

好久不见,基因组直播又来了。这篇推送是对SNV进行一个初步探索。 单纯的一个样本来找CNV,总是不太准确的,但还是那句话,毕竟是自己的基因组,硬着头皮也要上。当...

42813
来自专栏腾讯数据中心

探秘平衡阀

平衡阀,从字面上理解是在水力工况下,在管道系统中起到平衡调节的阀门。在制冷供暖等系统中,平衡阀对于系统的水力平衡发挥着重要的作用。平衡阀的种类有很多,包括静态...

2233
来自专栏数据小魔方

R语言可视化——ggplot图表系统中的辅助线

在之前的推送中,曾经有过一篇介绍excel图表辅助线的制作方法,其中用到的技巧五花八门、令人眼花缭乱。 而ggplot图表系统中的辅助线添加起来却异常简单,非常...

39713
来自专栏CDA数据分析师

手把手教你用Python分析电影 | 以《蚁人2》为例

《蚁人2》自8月24日在中国大陆上映以来,已经有将近一个月。作为《复仇者联盟3》之后漫威出品的首部电影,《蚁人2》对漫威宇宙电影的剧情承转起着关键作用。9月20...

2572
来自专栏生信宝典

生信宝典之傻瓜式(四)蛋白蛋白互作网络在线搜索

傻瓜系列重启了,今天要介绍的是一款在线查询蛋白-蛋白互作网络的工具 STRING (https://string-db.org/)。 STRING数据库收录了2...

4775
来自专栏生信宝典

高通量数据分析必备|基因组浏览器使用介绍 - 3

前面两篇文章(高通量数据分析必备|基因组浏览器使用介绍 - 1和高通量数据分析必备|基因组浏览器使用介绍 - 2)介绍了EPGG的基本使用、各部分特征、Trac...

1265
来自专栏生信技能树

【直播】我的基因组52:X和Y染色体的同源区域探索

很久以前,我其实就遇到过通过NGS测序数据来判定性别的难题(搜索我博客即可查看详情),本次探究自己的基因组得到的统计结果与常识不符,所以我可以肯定是我们的常识太...

35611
来自专栏生信技能树

【直播】我的基因组47:测序深度和GC含量的关系

在前面我们用 ChIP-seq 的分析方法可视化了一下我的 WGS数据,结果我们的测序深度分布居然是跟基因组的genomic feature相关。 比如在TSS...

7869
来自专栏AI科技大本营的专栏

AI 技术讲座精选:数学不好,也可以学习人工智能(三)

【AI100 导读】学习人工智能到底要不要学好数学,这俨然已经成了一个争议话题了?之前 AI100 刊发了本系列的前两篇文章,也发表了作者子白的《放弃幻想,搞 ...

45317

扫码关注云+社区

领取腾讯云代金券