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

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

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

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

超强脑洞第五弹——ggplot 构造连环饼图

今天这篇之前曾有涉略过,就是利用ggplot的辅助插件工具——scatterpie制作基于气泡图的饼图,之前曾在地图图层上演示过此种类似图表,不过这里我将其与折...

3875
来自专栏周明礼的专栏

Threejs 快速入门

在什么都是3D,看电影3D,打游戏3D,估计3D打车,很快就会面世。那么作为前端开发的标准语言,JS和3D能不能也搞出点大新闻呢?刚好最近在做一个活动时,就遇到...

3.3K2
来自专栏数据小魔方

商务图表案例——仿经济学人分组漏斗图~

今天看到一个看着挺养眼的经济学人图表案例,于是职业病爆发了,用ggplot2按照自己的思路写了一遍。现在把代码思路分享给大家! ? 加载包: library("...

5114
来自专栏算法+

半径无关快速高斯模糊实现(附完整C代码)

之前,俺也发过不少快速高斯模糊算法. 俺一般认为,只要处理一千六百万像素彩色图片,在2.2GHz的CPU上单核单线程超过1秒的算法,都是不快的. 之前发的几个算...

7458
来自专栏数据小魔方

sparklines迷你图系列2——Performance

昨天跟大家分享了关于sparklines迷你图插件的的第一类图表类型,尺度(Scales)图表类型,今天要分享的是第二个图表类型——在项目标管理中使用频率非常高...

3036
来自专栏互联网杂技

js调用原生API--陀螺仪和加速器

介绍 W3C设备方向规范允许开发者使用陀螺仪和加速计的数据。这个功能能被用来在现代浏览器里构筑虚拟现实和增强现实的体验。但是这处理原生数据的学习曲线对开发者来说...

87113
来自专栏RESTART POiNTER

Web H5视频滤镜的“百搭”解决方案——WebGL着色器

视频滤镜,顾名思义,是在视频素材上duang特效的一种操作。 随着H5页面越做越炫酷的趋势,单一的视频播放已经不能满足我们的需求,视频滤镜在Web页面上的应用越...

1.9K3
来自专栏落影的专栏

OpenGL ES实践教程(八)blend混合与shader混合

教程 OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 OpenGL ES实践...

5825
来自专栏HT

纯Shading Language绘制飞机火焰效果

上篇《纯Shading Language绘制HTML5时钟》体现了GLSL可编程性特点,但没有体现GLSL可编程出各种酷炫效果的特点,今天我们将用纯Shadin...

2296
来自专栏腾讯社交用户体验设计

打造高大上的Canvas粒子动画

4153

扫码关注云+社区

领取腾讯云代金券