3.1 简介

图形图层语法基于Wilkinson的图形语法,并在其基础上添加了许多新功能,使得图形更有表现力,并能完美地嵌入到R的环境中。

图形图层语法使得图形的重复更新变得简单——每次只更新一个特征。该语法的价值还在于它从更高的视角审视了图形的构成,它认为图形的每个组件都是可以修改的。因此,这就给了我们一个作图的基本结构框架,使得图形的绘制更为容易。对于特殊的问题,我们还可以利用它很方便地定义新图形。

3.2 耗油量数据

> head(mpg)
# A tibble: 6 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact

该数据集包含美国环保署提供的燃油经济性数据集。它包含1999年至2008年间发布的车型。

  • manufacturer,model:型号名称
  • displ:发动机排量,升
  • year:制造年份
  • cyl:气缸数
  • trans:传动类型
  • drv:f =前轮驱动,r =后轮驱动,4 =四轮驱动
  • cty:每加仑城市行驶英里数
  • hwy:每加仑公路里程
  • fl:燃油类型
  • class:车辆类型

3.3 绘制散点图

qplot(displ, hwy, data = mpg, colour = factor(cyl))

通过发动机排量(以升为单位 displ)对高速公路耗油量(英里每加仑hwy)根据汽缸数目着色的散点图。可以发现影响燃油经济性最重要的因素:发动机排量大小。

图形属性和数据的映射

每个点不仅有横坐标和纵坐标,还有大小、颜色和形状,这些属性我们称之为图形属性。每个图形属性都可以映射为一个变量或者设定为一个常数。上图中displ控制点的水平位置,hwy控制点的竖直位置,cyl控制点的颜色,而点的形状和大小都没有指定映射的变量,使用的是默认值(常数)。

点、线和条都是几何对象的具体表现形式,决定了图形的类型,只含一种几何对象的图通常有特定的名字:

散点图——点,气泡图——点,条形图——条形,箱线图——箱子,折线图——线。

标度变换

把数据单位(升、英里加仑数和气缸数)转换成电脑可以识别的物理单位(如像素和颜色),这个过程称为标度转换。

颜色的标度变换就是将数据的值映射到三维的颜色空间中,当变量是离散型时,默认将它的值等距的 映射到色轮上。

3.4 更复杂的图形示例

qplot(displ, hwy, data = mpg, facets = . ~ year) + geom_smooth()

分面板形成了一个二维网格,图层在第三维方向上叠加。

平滑曲线层和散点层的不同之处在于它没有展现原始数据,而是展示了统计变换后的数据。平滑曲线层拟合了一条穿过数据中间位置的平滑曲线。添加该图层需要将数据映射到图形属性后,对其进行统计变换。在上图中,统计变换首先用一条loess平滑曲线来拟合数据,然后再数据的范围内,利用等间隔的点,计算并返回点所对应的预测值。其他有用的统计变换包括一维和二维的封箱、求组平均、分位数回归和等高线。

ggplot2的绘图过程:将变量映射到图形属性→对数据进行分面处理→标度变换→计算图形属性→标度训练→标度映射→渲染几何对象。

3.5 图层语法的组件

图层语法所定义的图由以下几部分组成:

  1. 一个默认的数据集和一组从变量到图形属性的映射;
  2. 一个或多个图层,每个都由一种几何对象、一种统计变换和一种位置调整组成;
  3. 标度,每个图形属性映射都对应一个标度;
  4. 一个坐标系统;
  5. 分面设定。

3.5.1 图层

图层的作用是生成在图像上可以被人感知的对象。一个图层由4部分组成:

  1. 数据和图形属性映射;
  2. 一种统计变换;
  3. 一种及几何对象;
  4. 一种位置调整方式。

3.5.2 标度

标度控制数据到图形的映射,并且图形上所用的每一个图形属性都对应着一个标度。每个标度都作用于图形中的所有数据,以确保从数据到图形属性映射的一致性。

一个标度就是一个含有一组参数的函数,它的逆也是如此。例如颜色梯度,把一条实线的各部分映射成一条含不同颜色的路径,函数中的参数可以规定该路径是直线还是曲线,决定选择哪种颜色空间(LUV还是RGB),起始和终止位置的颜色。

其逆函数被用来绘制参照对象,通过参照对象才能读出图里隐含的信息。参照对象可以是坐标轴或者是图例。大多数的映射都由唯一的逆函数(一一映射),但有些不是。逆映射的唯一性使得复原数据成为可能,但当我们只关注某个方面时,我们不是很在意它是不是唯一映射。

从左到右:连续型变量映射到大小和颜色,离散型变量映射到形状和颜色。

3.5.3 坐标系

坐标系可将对象的位置映射到图形平面上,笛卡尔坐标系是最常用的二维坐标系,极坐标系和各种地图投影则用得相对少一些。

3.5.4 分面

分面是条件绘图和网络绘图的一般形式,通过它可以方便地展示数据的不同子集。特别是当验证在不同条件下模型是否保持一致时,分面绘图是一个强大的工具。

3.6 数据结构

ggplot2的图形语法通过一种非常简单直接的方式编码到R的数据结构中。一个图形对象就是一个包含数据、映射、图层、标度、坐标和分面的列表,图形对象中还有一个目前我们还未讨论的组件:options。

当我们得到一个图形对象时,可以对他进行如下处理:

  • 用print()函数将其呈现到屏幕上。在交互式操作时print()会自动地被调用,但是在循环或函数里,我们需要手动输入print();
  • 用ggsave()函数将其保存到磁盘;
  • 用summary()查看它的结构;
  • 用save()函数将它的缓存副本保存到磁盘,这样可以保存一个图形对象的完整副本,使用load()函数可以重现该图。

例如:

p <- qplot(displ, hwy, data = mpg, colour = factor(cyl))
print(p)
summary(p)
# 保存图形对象
save(p, file = "plot.rdata")
# 读入图形对象
load("plot.rdata")
# 将图片保存成png格式
ggsave("plot.png", width = 5, height = 5)

data: manufacturer, model, displ, year, cyl, trans, drv, cty,
hwy, fl, class [234x11]
mapping: x = ~displ, y = ~hwy, colour = ~factor(cyl)
faceting: <ggproto object: Class FacetNull, Facet, gg>
compute_layout: function
draw_back: function
draw_front: function
draw_labels: function
draw_panels: function
finish_data: function
init_scales: function
map_data: function
params: list
setup_data: function
setup_params: function
shrink: TRUE
train_scales: function
vars: function
super: <ggproto object: Class FacetNull, Facet, gg>
-----------------------------------
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity

总结

ggplot2(3) 语法突破的更多相关文章

  1. (数据科学学习手札37)ggplot2基本绘图语法介绍

    一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...

  2. ggplot2(11) 总结回顾&案例练习

    从2020年2月20到2月27日,3月13日到2020年3月16日,学习了ggplot2:数据分析与图形艺术(哈德利·威克姆 著 统计之都 译),历时12天.另外,3月6日到3月9日参加了美赛,也用到 ...

  3. R语言:ggplot2精细化绘图——以实用商业化图表绘图为例

    本文版权归http://www.cnblogs.com/weibaar 本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从exce ...

  4. [R可视化]ggplot2库介绍及其实例

    前言 ggplot是一个拥有一套完备语法且容易上手的绘图系统,在Python和R中都能引入并使用,在数据分析可视化领域拥有极为广泛的应用.本篇从R的角度介绍如何使用ggplot2包,首先给几个我觉得最 ...

  5. ggnetwork

    ggnetwork ggnetwork PeRl 简介 ggnetwork是根据ggplot2的语法,开发的用于网络图可视化的包.虽然igraph是优秀的network处理包,但是在可视化方面依然是弱 ...

  6. HTML 学习笔记 CSS样式(简介和语法)

    CSS概述 CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在样式表中 把样式添加到HTML4.0中 是为了解决内容与表现分离的问题 外部 ...

  7. java基础语法要点<一>(基于1.8)

    http://yishouce.com/java/run http://www.shucunwang.com/RunCode/java/ 数据类型 8种基本数据类型及对应的 类型封装器 byte, s ...

  8. ggplot2包--R可视化

    1.ggplot2发展历程 ggplot2是Hadley在爱荷华州立大学博士期间的作品,也是他博士论文的主题之一,实际上ggplot2还有个前身ggplot,但后来废弃了,某种程度上这也是Hadley ...

  9. Swift入门教程:基本语法大全

    原文:Swift入门教程:基本语法大全       简介:                                                                        ...

随机推荐

  1. django框架中的cookie与session

    cookie因为http是一个无状态协议,无法记录用户上一步的操作,所以需要状态保持.cookie和session的区别:1.cookie是保存在浏览器本地的,所以相对不安全.cookie是4k的大小 ...

  2. deeplearning.ai 序列模型 Week 2 NLP & Word Embeddings

    1. Word representation One-hot representation的缺点:把每个单词独立对待,导致对相关词的泛化能力不强.比如训练出“I want a glass of ora ...

  3. Raspberrypi 装配笔记

    1 镜像烧制 2 基础配置 2.1 SSH 连接 2.2 修改管理员密码 2.3 Samba 3 功能配置 3.1 Homebridge 1 镜像烧制 从树莓派官网下载最新的 Raspbian 系统镜 ...

  4. linux下文件夹归置方式

    /bin:二进制可执行命令./dev:设备特殊文件./etc:系统管理和配置文件./etc/rc.d:启动的配 置文件和脚本./home:用户主目录的基点,比如用户user的主目录就是/home/us ...

  5. synchronized互斥锁实例解析

    目录 synchronized互斥锁实例解析 1.互斥锁基础使用:防止多个线程同时访问对象的synchronized方法. 1.1.多个线程调用同一个方法 1.2.多个线程多个锁,升级为类锁 2.线程 ...

  6. springboot中使用异步的常用两种方式及其比较

    一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来优化.实现异步的常用方法远不止两种,但是个人经验常用的,好用 ...

  7. 推荐使用concurrent包中的Atomic类

        这是一个真实案例,曾经惹出硕大风波,故事的起因却很简单,就是需要实现一个简单的计数器,每次取值然后加1,于是就有了下面这段代码:           private int counter = ...

  8. Java找出两个链表的第一个公共节点

    题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...

  9. 从广义线性模型(GLM)理解逻辑回归

    1 问题来源 记得一开始学逻辑回归时候也不知道当时怎么想得,很自然就接受了逻辑回归的决策函数--sigmod函数: 与此同时,有些书上直接给出了该函数与将 $y$ 视为类后验概率估计 $p(y=1|x ...

  10. 孙鑫VC视频教程观看记录

    01: 了解了SDK编程,消息队列,消息响应,消息循环,窗口函数等. 02: 可以冒号:父类构造函数和a(1) protected子类可以访问 覆盖:父类子类之间   重载:同一个类中 ::作用域标识 ...