查看原文
其他

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

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

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




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


魔方学院QQ群:


QQ群:

微信群:


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

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