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爬虫带用户名密码登录
# -*- coding: utf-8 -*- """ Created on Wed Jun 6 13:18:58 2018 @author: Lenovo " ...
- eclipse 设置字体与自动提示
1.设置字体与字体大小 至此,字体与大小设置完毕. 2.设置自动提示 在输入框中输入 1-9 a-z A-Z .点击“Apply”保存. 开启JavaScript 自动提示 灰色未激活,先点击复选框激 ...
- unittest(23)- python发邮件
import smtplib import time from email.mime.multipart import MIMEMultipart from email.mime.text impor ...
- jstl引入报错
jstl1.0的引入方式为: <taglib uri="http://java.sun.com/jstl/core" prefix="c" /> j ...
- 从Surface 3发布 看微软快速转向的根由
3发布 看微软快速转向的根由" title="从Surface 3发布 看微软快速转向的根由"> 平地一声惊雷起,微软突然送惊喜!在毫无征兆的情况下,微软突然发布一 ...
- hql错误:No data type for node: org.hibernate.hql.ast.tree.IdentNode
今天写了一个查询,用的是hql,数据库是mysql.多表联查,结果报错了报: \-[IDENT] IdentNode: 'routerNumber' {originalText=routerNumbe ...
- webpack里面__dirname意思
- Rails (栈)
题目链接:https://vjudge.net/problem/UVA-514 题目大意: 有A,B,C三个火车停靠点,火车最初停在A站,给你一个序列,问你能不能通过中转站C到达B站,火车从A站进入到 ...
- 瑞士一苹果店内iPhone突然爆炸致7人入院,iPhone还值得买吗?
与国产手机高歌猛进态势呈现"最萌发展差"的,是以三星.苹果为代表的海外手机厂商在过去一年的疲态.数据显示,2017年小米手机产量较2016年增长幅度达76%,OPPO和vivo则分 ...
- 码海拾遗:基于MySQL Connector/C++的MySQL操作(连接池)
1.MySQL安装及简单设置 (1)安装:在OSX系统下,可以使用万能的“brew install”命令来进行安装:brew isntall mysql(默认安装最新版的MySQL) (2)启动:br ...