前言

R语言的强大之处在于统计和作图。其中统计部分的内容很多很强大,因此会在以后的实例中逐步介绍;而作图部分的套路相对来说是比较固定的,现在可以先对它做一个总体的认识。

在上一篇文章中,介绍了使用graphics库进行绘图的方法,而本文将引入一个更为强大的库 --- ggplot2,它能做出各式各样,非常酷炫的统计图(甚至地图,热图等)。

本文将结合一个实际项目中的例子讲解如何使用ggplot2绘图。

ggplot绘图总体步骤

1. 调用ggplot函数设置图形基本信息 --- 如:使用的数据集,x轴y轴向量,分类向量等最为基础的特征。

2. 调用各种绘图函数绘制各类图形 -- 如:条形图(geom_bar),直方图(geom_histogram),散点图(geom_point)等。

3. 调用各种标度函数对图形进行调整 --- 如:调整坐标轴(scale_x_continuous),调整色彩(scale_colour系列),调整图例(scale_fill系列)等。

4. 调用annotate函数往图形中添加注解。

5. 调用theme函数以对图形进行最终美化。一般来说这个函数是仅仅对外观因素进行美化,和具体数据不打交道。

特别强调的是第五点theme函数特别强大,能定制出非常酷炫的效果。

一个双柱状图+折线图的绘制实例

本例需要生成的是一个用户在过去一段时间内,观看韩剧以及非韩剧节目的时间随时间变化的双柱状图,同时,要在这个图形上用折线图绘制所有用户观看韩剧/非韩剧的平均时间。

第一步:获取基础数据集(仅显示部分)

该数据集中,每行代表该用户的一次观看记录。

各字段说明:

- DEVICE_ID:用户标识
- WATCH_TIME:观看时间
- WATCH_DURATION:观看时长
- ISKD:该节目是否为韩剧
- PERTIME:所有用户的平均观看时长

第二步:数据清洗

在刚从文本中获取到数据后,数据类型有可能不是你所期望的。

比如我的这个例子中,获取到的WATCH_TIME是因子类型,这显然不合我意。于是我将它转换成了时间类型。另外ISKD因为待会要拿他作为两个柱状的区分条件,因此将它转换为因子类型。至于观看时间,由于精度要求不高,因此直接转换为整型。

另外,第一列的数据没用到(用户的设备ID),因此剔除掉。

清洗完毕后的数据集如下:

第三步:构建图形基础函数变量
       

这一步生成的graph_base变量表示,使用data数据集,横轴为观看时间,纵轴为观看时长,根据该剧目是否为韩剧进行分类,且纵轴最大值为观看时间的最大值。

这些基础信息都可以保存在这样的一个变量里,随掉随用。

第四步:绘制韩剧/非韩剧观看时长双柱状图

绘制函数中的参数与该图形显示有关,其中stat表示取观看时长的具体值,position表示双柱状是左右并列显示。

注意是在上一步的基础图形信息变量上加上绘制函数,这就仿佛在基础图层之上添加了一个图层。

第五步:绘制平均观看时长折线图

另外两行代码则进行描点,显示具体值的操作。

注意同样是在上一步生成的变量之上叠加图层。

第六步:对坐标轴进行调整

这段代码将横坐标轴进行了格式化(具体参数请查阅相关手册)以及一定的美化。

所谓的坐标轴,或者下面要修改的图例都可以统称为标度。ggplot各种各样的标度函数,其形式大约都是scale_xx_xx这样。

第七步:设置标题,图例等信息

这一步对图中的图例以及图像的标题进行了较为细致的调整,使得图像看起来更加美观。

另外绘制柱状图图例的时候也顺便为柱状图设置了主题色Pastel1。

第八步:保存绘制结果:

还可以保存为pdf格式之类的,非常方便。

结果展示

小结

本文仅仅是从一个实例出发,讲解ggplot2绘图的基本框架步骤。对于其他细节,请读者在具体使用到的时候再去专门查询,没必要一次学会。

最后推荐一本书《R数据可视化手册》。

第三篇:数据可视化 - ggplot2的更多相关文章

  1. kaggle入门项目:Titanic存亡预测(三)数据可视化与统计分析

    ---恢复内容开始--- 原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Ach ...

  2. python 金融应用(三)数据可视化

    matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能. 主要是2-D绘图.金融绘图和3-D绘图 一.2-D绘图 1.1一维数据集 #导入所需要的包impo ...

  3. Python-10行代码实现3个数据可视化

    阅读本文约“1分钟” 最近将Python作为第二编程语言,进行了了解与学习,可以说它的包是很强大的.这次的demo仅仅不到10行代码就可以实现三个数据可视化的小实例. 我们将要使用到matplotli ...

  4. Python数据可视化:网易云音乐歌单

    通过Python对网易云音乐华语歌单数据的获取,对华语歌单数据进行可视化分析. 可视化库不采用pyecharts,来点新东西. 使用matplotlib可视化库,利用这个底层库来进行可视化展示. 推荐 ...

  5. python学习笔记(2):科学计算及数据可视化入门

    一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

  6. 第一篇:R语言数据可视化概述(基于ggplot2)

    前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...

  7. 第三篇:R语言数据可视化之条形图

    条形图简介 数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.其中有两点要重点注意: 1. 条形图横轴上的数据是离散而非连续的.比如想展示两商品的价格 ...

  8. 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)

    前言 上一篇重点讲解了数据仓库建模,它是数据仓库开发中最核心的部分.然而完整的数据仓库系统还会涉及其他一些组件的开发,其中最主要的是ETL工程,在线分析处理工具(OLAP)和商务智能(BI)应用等. ...

  9. [转载] 第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)

    阅读目录 前言 创建数据仓库 ETL:抽取.转换.加载 OLAP/BI工具 数据立方体(Data Cube) OLAP的架构模式 小结 回到顶部 前言 上一篇重点讲解了数据仓库建模,它是数据仓库开发中 ...

随机推荐

  1. 用Android属性动画实现和演示迪士尼动画基本原则

    本文将介绍在Android平台上实现和演示迪士尼动画基本准则. 项目开源,GitHub: https://github.com/vhow/animation 说明: 演示动画原则的想法源自 Anima ...

  2. 网络配置:linux学习第一篇

    1.      先使用dhclient获取ip 再使用命令ip addr查看获取到的ip 2.      设置静态IP 编辑网卡配置文件,路径: 3.      重启网络服务 命令:systemctl ...

  3. MySQL5.7 group by新特性,报错1055

    项目中本来使用的是mysql5.6进行开发,切换到5.7之后,突然发现原来的一些sql运行都报错,错误编码1055,错误信息和sql_mode中的"only_full_group_by&qu ...

  4. 如何使用 VS2015 进行远程调试?

    VisualStudio\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger 直接复制 Remote Debugger 文件,里面包含了 ...

  5. 《android开发艺术探索》读书笔记(十二)--Bitmap的加载和Cache

    接上篇<android开发艺术探索>读书笔记(十一)--Android的线程和线程池 No1: 目前比较常用的缓存策略是LruCache和DiskLruCache,LruCache常被用作 ...

  6. 2017第八届蓝桥杯 K倍区间

    标题: k倍区间 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  7. POJ - 2492 种类并查集

    思路:保存每个点与其父节点的关系,注意合并和路径压缩即可. AC代码 #include <cstdio> #include <cmath> #include <cctyp ...

  8. docker 数据卷之进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  9. 排序算法java实现

    1. 插入排序 原理:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.    算法的复杂度也是简单 ...

  10. 阿里云服务器部署笔记一(python3、Flask、uWSGI、Nginx)

    一.重置密码,并重启服务器 二.安全组配置>配置规则>添加安全组规则(为了能在本地ssh到实例) 配置如下: 此配置为允许任意公网IP登陆实例,注意windows与Linux系统端口范围不 ...