专栏首页数据小魔方R语言可视化——ggplot的theme订制

R语言可视化——ggplot的theme订制

ggplot作图系统在R预言诸多可视化包中之所以如此的风靡,除了它拥有自己的图层理念之外,我觉得还要归功于它对于图表细节元素的灵活调整。

对于ggplot的初学者而言,可能没有太多的在意图表的主题是否优雅,配色是否美观,仅求能够准确无误的出图就OK了。

但是如果仅限于此,那么使用ggplot作图真的就是杀鸡用了宰牛刀了。

就拿默认的图表来说,虽然你只靠两句代码就可以跑出来一幅还算及格的图表,可是ggplot语法博大精深,背后给你的代码默认匹配的参数不计其数。

其中有一组特别庞大的参数组就是theme()参数:

默认的图表再不添加任何自定义主题和配色的情况下,软件会给出默认的主题和配色:

默认主题是theme_gray,中一共给出了两套主题,分别是theme_gray、theme_bw

接下来我们来一步步验证:

首先加载包:

library(ggplot2)

library(reshape2)

library(ggtheme)

data<-data.frame(Name = c("苹果","谷歌","脸书","亚马逊","腾讯"),Conpany = c("Apple","Google","Facebook","Amozon","Tencent"),Sale2013 = c(5000,3500,2300,2100,3100),Sale2014 = c(5050,3800,2900,2500,3300),Sale2015 = c(5050,3800,2900,2500,3300),Sale2016 = c(5050,3800,2900,2500,3300))

mydata<-melt(data,id.vars=c("Name","Conpany"),variable.name="Year",value.name="Sale")

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")

以上代码(已经简化的不能再简化了,不夸张的说,再少一个标点符号,就要报错了)跑出来的默认堆积条形图。

可是在R预言可视化这个领域内,以上图表绝对是一个烂大街的货色,怎么说呢,因为你不修改主题,它搭配的主题永远都是theme_gray

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")+theme_gray()

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")+theme_bw()

以上两个图表分别套用了默认主题theme_gray()和备用主题theme_bw(),所以看去来前者与第一幅图无异,后者则差别很大。

虽然看起来修改主题好像很简单的样纸,殊不知,在主题内部,该函数是设定了不计其数、让人眼花缭乱的参数。

你可以通过theme_gray 查看主题函数内的参数配置:

theme_gray

theme_bw

哈哈看傻眼了吧,其实仔细捋一捋,主题函数内的参数虽然繁杂,但是绝对算不上晦涩。

以下是自己整理的主题参数列表:

通过设定主题参数,你也可以制作专属的图表主题模板。

接下来我将设定一个简单的主题模板用于修改以上的图表主题;

theme_xmf <- function(..., bg='white'){

require(grid)

theme_classic(...) +

theme(rect=element_rect(fill=bg),

plot.margin=unit(rep(0.5,4), 'lines'),

panel.background=element_rect(fill='transparent', color='transparent'),

panel.border=element_rect(fill='transparent', color='transparent'),

panel.grid=element_blank(),

axis.title = element_text(color='black', vjust=0.1),

axis.ticks.length = unit(-0.3,"lines"),

axis.ticks = element_line(colour = "grey20"),

legend.title=element_blank(),

legend.key=element_rect(fill='transparent', color='transparent'))

}

套用自己的自定义主题:

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")+theme_xmf()

这里要强调一点,主题中是不包含颜色模板设定的,因为颜色的使用场景及类别比较复杂,会有专门的颜色标度进行设定,其实就是scale_colour_xxx()/scale_fill_xxx()进行设定(分别为点、线色以及区域色)

这里暂且使用一个RColorbrewer色板中的渐变色装饰一下,不做过多解释,下一节,专门讨论颜色。

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")+theme_xmf()+scale_fill_brewer(palette="Blues")

至于图表中的颜色填充顺序和图例相反,这个问题只需追加一句代码即可:

ggplot(mydata,aes(Conpany,Sale,fill=Year))+geom_bar(stat="identity")+theme_xmf()+scale_fill_brewer(palette="Blues")+guides(fill = guide_legend(reverse = TRUE))

其他的细节设定,下节讲。

本文分享自微信公众号 - 数据小魔方(datamofang),作者:小魔方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-06

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言可视化——柱形图美化(簇状、堆积、百分比)

    昨天以最简单的单序列柱形图作为对象详细的讲解了关于套用主题以及图表美化的思路。 今天就我们常用的几种柱形图的衍生图表——簇状柱形图、堆积柱形图、百分比堆积柱形图...

    数据小磨坊
  • 不经意间又发现了一个有趣又炫酷的包~

    算起来有四五天没有更新公众号了,说好的日更呢(~—~) 小伙伴儿们竟然都没有取关,真的好感动,今天正式回归,以后可能不会更新的那么频繁了,但是…… 内容的质量一...

    数据小磨坊
  • 离散颜色标度连续化的最佳方案

    数了一下刚好有一周多没有写新文章了,主要是临近毕业琐事比较多,再也没有像之前那样,拥有大把时间可以用来挥霍和消遣,静下心来写代码了。 毕竟要写一篇技术含量很高而...

    数据小磨坊
  • 灌入大量数据后手工采集统计信息的重要性

    SQL> create table TBL_STAT as select * from dba_objects where 1<>1; Table creat...

    bisal
  • MySQL学习之Can't connect to MySQL server on localhost (10061)

    最近升级 了系统,开机后连接MySQL报错,Can't connect to MySQL server on localhost (10061); 估计是升级系...

    Jetpropelledsnake21
  • 写个 Hello World 而已,要不要这么震撼?!

    Atom 编辑器的一个插件,可以让你写代码的时候体验狂拽酷炫的效果! ? 如果来点音乐、再配上机械键盘的话,写代码是不是爽到爆呢? ? 这货全名叫: activ...

    顶级程序员
  • 重磅报告|国产手机品牌社交魅力赶超苹果,产品功能营销或成购买转化利器

    2018年,随着Vivo、OPPO、小米、华为等国产品牌的再度发力,国产手机品牌主们显然已不满足于扮演苹果手机的拥趸。6月,vivo NEX和OPPO Find...

    iCDO互联网数据官
  • Android Studio 打包时 Signature Version V1 V2

    最近在提交测试的时候,用Android Studio给测试打了个包,如下图,我打包时,没注意选择Signature Versions,结果测试就找来了,说给他的...

    蜻蜓队长
  • 编程小白 | 每日一练(174)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    C语言入门到精通
  • 高性能MySQL第2版中文版.施瓦茨.扫描版.pdf

    本书荣获2009年Jolt图书大奖,是不可多得的分享MySQL实用经验的图书。它不但可以帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开...

    用户3157710

扫码关注云+社区

领取腾讯云代金券