前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化——图表美化与套用主题(上)

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

作者头像
数据小磨坊
发布2018-04-11 13:28:48
2.5K0
发布2018-04-11 13:28:48
举报
文章被收录于专栏:数据小魔方数据小魔方

ggplot函数所制作的图表默认设计风格虽然经过设计师的精雕细琢,但是并不是尽如人意。

毕竟在这个大众审美水平水平越来越高的时代里,企业中的各式报告也强调与企业的VI相互统一,形成自身风格与特点。

这样就要求R语言所制作的图表能够根据所需的风格与主题,高度可定制。当然ggplot函数中是支持这种多样性的订制需求的,甚至像那些知名的咨询或者顶级财经媒体的御用图表模板已经被制作成了图表主题分享在R语言的主题包之中。

接下来要介绍关于图表主题设置的一些细节:

关于柱形图与条形图的转化问题:

这个问题昨天已经提到了,R语言是不区分柱形图、条形图的,两者都叫Barplot,只是开口方向不同。(原因前文已经说明)

柱形图与条形图之间的转换秩序一句代码即可:

coord_flip() #柱形图与条形图之间翻转

ggplot(mpg,aes(class,displ))+geom_bar(stat="identity",fill="steelblue")

ggplot(mpg,aes(class,displ))+geom_bar(stat="identity",fill="steelblue")+coord_flip()

柱形图/条形图按照指标顺序排序:

默认情况下柱形图指标顺序非常混乱,我们可以通过参数设置让柱形图按照指标由高到低或者由低到高排序。

我们从ggplot默认自带数据集mtcars中取前8条记录作图:

data<-mtcars[0:8,]

ggplot(data, aes(row.names(data), qsec))+ geom_bar(stat = "identity", fill = "steelblue")

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")

添加排序参数之后,图表看上去舒服很多,但是X轴横坐标英文名字太长,我们采用条形图规避,或者将X轴标签文字旋转90度。

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")+coord_flip()

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")+theme(axis.text.x=element_text(angle = 90, colour = "black"))

由于添加排序参数,导致默认X轴标题被更改,这里我们要从新定义X轴、Y轴标题

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")+theme(axis.text.x=element_text(angle = 90, colour = "black"))+labs(x = "Cars", y = "Q seconds")

定义X轴、Y轴标签文本的大小、颜色、字体

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue")+

theme(axis.text.x=element_text(angle = 90,size = 10, colour = "black"),axis.text.y=element_text(size = 10, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))

添加标题:

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue")+

theme(axis.text.x=element_text(angle = 90,size = 10, colour = "black"),axis.text.y=element_text(size = 10, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")

还有柱形图的背景带着网格线和灰色底色,如果想要修改也需要单独调整参数。

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue")+

theme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")+

theme(panel.grid = element_blank())+theme(panel.background = element_blank())

调整柱形图的数据条宽度:

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue",width=0.5)+

theme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")+

theme(panel.grid = element_blank())+theme(panel.background = element_blank())

为图标添加数据标签:

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue",width=0.5)+

theme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")+

theme(panel.grid = element_blank())+theme(panel.background = element_blank())+geom_text(aes(label = qsec, vjust = -0.8, hjust = 0.5)

大家可以看到,以上调整过程全部需要通过ggplot函数附加参数完成,机会每一个图表元素都有对应的调整参数,调整起来其实蛮辛苦的,不过对于同一类参数可以放在同一参数系统中去,也就是简化代码:

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+

geom_bar(stat = "identity", fill = "steelblue",width=0.5)+

labs(x = "Cars", y = "Q seconds")+

ggtitle("An Indrouction of BarPlot ")+

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

theme(

axis.text.x=element_text(angle = 90,size = 14, colour = "black"),

axis.text.y=element_text(size = 14, colour = "black"),

text=element_text(family = "arial", size = 20),

panel.grid = element_blank(),

panel.background = element_blank()

)

经过简化后的代码还是如上所示的那么长,而且我还是以最为简单的单序列柱形图为例所介绍的呢,而且还没有考虑到对坐标轴刻度线长度、刻度范围的调整,如果是多序列条形图甚至是分面的多序列条形图的调整元素就更多了,以上的代码还能继续写出几十行呢(哈哈夸张了,不过真的很长呢-_-)

ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ #x轴排序

geom_bar(stat = "identity", fill = "SandyBrown",width=0.8)+ #填色、柱形宽度

labs(x = "Cars", y = "Q seconds")+ #X、Y轴标题

ggtitle("An Indrouction of BarPlot ")+ #图表标题

geom_text(aes(label = qsec, vjust = -0.5, hjust = 0.5))+ #添加数据标签

theme(

axis.text.x=element_text(angle = 90,size = 12, colour = "DarkGrey"),

#X轴标签文本旋转、大小、颜色

axis.text.y=element_text(size = 12, colour = "DarkGrey"),

#Y轴标签文本大小、颜色

axis.ticks.length=unit(0.5,'cm'),

#坐标轴刻度线长度

text=element_text(family = "arial", size = 20,colour = "DimGrey"),

#图表内文本字体

panel.grid = element_blank(),

panel.background = element_blank()

) #清空图层背景、网格线

所以呢,如果想要找到一种即不需要写很长很冗杂的代码,而且又能将图表美化的超级漂亮的方法,那真的就完美了呢~

那就要站在巨人的肩膀上喽,使用那些发烧友所写的行业标杆级的图表主题包。(明天再继续写吧,写了辣么多累了~)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档