ggplot2(3) 语法突破
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 图层语法的组件
图层语法所定义的图由以下几部分组成:
- 一个默认的数据集和一组从变量到图形属性的映射;
- 一个或多个图层,每个都由一种几何对象、一种统计变换和一种位置调整组成;
- 标度,每个图形属性映射都对应一个标度;
- 一个坐标系统;
- 分面设定。
3.5.1 图层
图层的作用是生成在图像上可以被人感知的对象。一个图层由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) 语法突破的更多相关文章
- (数据科学学习手札37)ggplot2基本绘图语法介绍
一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...
- ggplot2(11) 总结回顾&案例练习
从2020年2月20到2月27日,3月13日到2020年3月16日,学习了ggplot2:数据分析与图形艺术(哈德利·威克姆 著 统计之都 译),历时12天.另外,3月6日到3月9日参加了美赛,也用到 ...
- R语言:ggplot2精细化绘图——以实用商业化图表绘图为例
本文版权归http://www.cnblogs.com/weibaar 本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从exce ...
- [R可视化]ggplot2库介绍及其实例
前言 ggplot是一个拥有一套完备语法且容易上手的绘图系统,在Python和R中都能引入并使用,在数据分析可视化领域拥有极为广泛的应用.本篇从R的角度介绍如何使用ggplot2包,首先给几个我觉得最 ...
- ggnetwork
ggnetwork ggnetwork PeRl 简介 ggnetwork是根据ggplot2的语法,开发的用于网络图可视化的包.虽然igraph是优秀的network处理包,但是在可视化方面依然是弱 ...
- HTML 学习笔记 CSS样式(简介和语法)
CSS概述 CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在样式表中 把样式添加到HTML4.0中 是为了解决内容与表现分离的问题 外部 ...
- java基础语法要点<一>(基于1.8)
http://yishouce.com/java/run http://www.shucunwang.com/RunCode/java/ 数据类型 8种基本数据类型及对应的 类型封装器 byte, s ...
- ggplot2包--R可视化
1.ggplot2发展历程 ggplot2是Hadley在爱荷华州立大学博士期间的作品,也是他博士论文的主题之一,实际上ggplot2还有个前身ggplot,但后来废弃了,某种程度上这也是Hadley ...
- Swift入门教程:基本语法大全
原文:Swift入门教程:基本语法大全 简介: ...
随机推荐
- Python接口自动化测试-下载文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang ''' 注意:定义类的时候,内部方法之间的互调 步骤: 1.按照 ...
- C# 内置的类型转换方法
C# 提供了下列内置的类型转换方法: 序号 方法 & 描述 1 ToBoolean把类型转换为布尔型. 2 ToByte把类型转换为字节类型. 3 ToChar如果可能的话,把类型转换为单个 ...
- 在HADOOP中使用MRUNIT进行单元测试
在HADOOP中使用MRUNIT进行单元测试 前提 1. 了解JUnit4.x的使用. 2. 了解Mock的概念在单元测试中的应用. 3. 了解Hadoop中MapReduce的编程模型. 如果您对J ...
- [LC] 17. Letter Combinations of a Phone Number
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that th ...
- Spring Boot 集成 Spring Security
1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- supervised learning|unsupervised learning
监督学习即是supervised learning,原始数据中有每个数据有自己的数据结构同时有标签,用于classify,机器learn的是判定规则,通过已成熟的数据training model达到判 ...
- Spring 插件安装
文件下载:https://pan.baidu.com/s/1jIBOggm 网站下载:http://dist.springsource.com/release/TOOLS/update/e4.5/
- 【C++基础】008常量和变量
简介:常量和变量. 常量和变量 1. 常量 具体把数据写出来 2,3,4: 1.2,1.3: "Hello World!","C++": cout <&l ...
- 银行储蓄程序(C++,simple)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 达拉草201771010105《面向对象程序设计(java)》第十五周学习总结
达拉草201771010105<面向对象程序设计(java)>第十四周学习总结 第一部分:理论知识 JAR文件: 1.Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包 ...