ggplot2读书笔记6:第四章 语法 基础理论

2023-11-18

碎碎念ing:终于结束了《ggplot2》的第一部分“Getting Started”,今天开始看第二部分——语法,第四章(Mastering the Grammar)介绍了ggplot2的一些基础语法知识,大概是对前期内容在理论上做一个总结。

建立一个散点图

首先还以“耗油量”数据集(mpg)为例。

library(ggplot2)
mpg
# A tibble: 234 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.80  1999     4 auto(l5)   f        18    29 p     comp…
 2 audi         a4          1.80  1999     4 manual(m5) f        21    29 p     comp…
 3 audi         a4          2.00  2008     4 manual(m6) f        20    31 p     comp…
 4 audi         a4          2.00  2008     4 auto(av)   f        21    30 p     comp…
 5 audi         a4          2.80  1999     6 auto(l5)   f        16    26 p     comp…
 6 audi         a4          2.80  1999     6 manual(m5) f        18    26 p     comp…
 7 audi         a4          3.10  2008     6 auto(av)   f        18    27 p     comp…
 8 audi         a4 quattro  1.80  1999     4 manual(m5) 4        18    26 p     comp…
 9 audi         a4 quattro  1.80  1999     4 auto(l5)   4        16    25 p     comp…
10 audi         a4 quattro  2.00  2008     4 manual(m6) 4        20    28 p     comp…
# ... with 224 more rows

我们想建立一个展示发动机排量(displ)和高速公路行驶记录每加仑行驶的英里数(hwy)关系的散点图,并用不同颜色标记汽缸变量(cyl)。代码如下:

ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
  geom_point()

image

You can create plots like this easily, but what is going on underneath the
surface? How does ggplot2 draw this plot?

1. 数据的美学映射(Mapping Aesthetics to Data)

散点图到底是啥?你以前见过很多,有可能也用手绘制过。散点图将每个观测值表示为一个点,根据两个变量的值进行定位。除了水平和垂直位置,每个点还具有大小,颜色和形状。这些属性被称为美学(aesthetics),是能在图形上感知的属性。每个美学可以映射到一个变量,或设置为一个常量值。在上图中,displ 映射到横轴上,hwy映射到纵轴上,cyl设置为彩色分类。大小和形状没有映射到变量,但保持其(恒定)默认值。

映射设定好之后,我们可以通过改变函数,画出除了散点图之外的折线图geom_line()、柱形图geom_bar()等:

## 折线图
ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
geom_line() +
theme(legend.position = "none")

## 柱形图
ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
geom_bar(stat = "identity", position = "identity", fill = NA) +
theme(legend.position = "none")

image

这些图虽然语法上是对的,但毫无意义。

点、线和条形都是不同的几何图形,他们组合起来可以有很多种plot:

Named plot Geom Others
Scatterplot Point
Bubblechart Point Size mapped to a variable
Barchart Bar
Box-and-whisker plot Boxplot
Line chart Line

有些图是根据实际需要添加的几何图形,他们没有确定的名称,如下:

ggplot(mpg, aes(displ, hwy, colour = factor(cyl))) +
  geom_point() +
  geom_smooth(method = "lm")

image

2. 标度(Scaling)

实际上,数据集中的数值对计算机没有任何意义。我们需要将它们从数据单位(例如,升,英里每加仑,气缸数量等)转换成计算机可以显示的图形单位(例如,坐标和颜色)。这种转换过程称为Scaling(scales)。

要生成一个完整的图表,需要三个主要元素:

  • data:数据
  • geom:代表数据的几何图形
  • scales and coordinate system:坐标系和标度

复杂化(Adding Complexity)

在普通的散点图中加线条和分面:

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_smooth() +
  facet_wrap(~year)

以上代码中增加了三个部分

  1. 分面(facets)
  2. 多个图层(multiple layers)
  3. 统计变换(statistics)

image

平滑图层geom_smooth()与点图层geom_point()不同,因为它不显示原始数据,而是显示数据的统计转换。所以,这个过程的形成是在将数据映射到美学之后,传递到统计转换(stat)加以处理。

图层语法的组成(Components of the Layered Grammar)

图表包括了数据、映射、统计变换、几何图形以及位置调整(position adjustment)。

图层 layers

图层由以下五个方面组成(具体见第五章):

  1. Data
  2. Aesthetic mappings.
  3. A statistical transformation (stat).
  4. A geometric object (geom).
  5. A position adjustment.
标度 Scales

标度控制的是从数据到图形属性的映射。下面是几种标度的例子:

image

(从左到右依次是连续型变量、离散型变量的形状和颜色标度)

(具体见第六章)

坐标系 Coordinate System

坐标系(简称coord)是指数据映射所在的图表平面,位置通常由两个坐标(x, y)决定。

坐标系的不同类型如下图:

image

(从左到右依次是笛卡尔坐标系、半对数坐标系、极坐标系)

分面 Facetting

(详见第七章)

= = = = = = = = 我是懵懵的分割线 = = = = = = = =

碎碎念plus:这一章看下来感觉干货不多,貌似更像是本书中间的一个过渡章节(也可能是我没有get到,不是很懂作者的用意)。囧。最后还是要放上参考资料,镇楼。


参考资料:

  1. Hadley Wickham(2016). ggplot2. Springer International Publishing. doi: 10.1007/978-3-319-24277-4
  2. 《R语言应用系列丛书·ggplot2:数据分析与图形艺术》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2读书笔记6:第四章 语法 基础理论 的相关文章

  • 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

    我有一个带有旋转坐标的 NetCDF 文件 我需要将其转换为正常的纬度 经度坐标 经度为 180到180 纬度为 90到90 library ncdf4 nc open dat nf 对于尺寸 它显示 1 5 variables exclu
  • R:单纯形错误:在下标赋值中不允许使用 NA

    对于以下具有目标函数和约束的最小化 boot simplex返回错误 Error in tab pr lt tab pr tab pr pc pv o tab pr NAs are not allowed in subscripted as
  • ggplot 中的 ggsave() for python 不保存

    我已将 ggplot 导入到 python 中 并运行以下脚本 希望 ggsave 实际上将我的绘图保存在某处 但它似乎实际上并未将任何内容写入 png 文件以供以后使用 当我在解释器中将其作为 p 返回时 该图就会返回 但我必须手动保存它
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • 自定义轴缩放后 ggplot2 缺少标签

    我正在尝试使用我的 x 轴应用自定义缩放ggplot2 and scales trans new 但是 当我这样做时 一些轴标签丢失了 有人可以帮我弄清楚为什么吗 Setup library tidyverse the data ds lt
  • 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本

    我正在尝试使用 Rstudio 从 VBA 打开 R 脚本 同时将参数传递给 R 脚本 然后我可以使用 commandArgs 访问该脚本 该问题与此处描述的问题非常相似 WScript Shell 用于运行路径中包含空格且来自 VBA 的
  • 将整个包传递给雪簇

    我正在尝试并行化 使用snow parLapply 一些依赖于包 即除snow 调用函数中引用的对象parLapply必须使用显式传递给集群clusterExport 有没有办法将整个包传递到集群 而不必显式命名每个函数 包括用户函数调用的
  • 是否有weighted.median()函数?

    我正在寻找类似形式的东西weighted mean 我通过搜索找到了一些解决方案 这些解决方案写出了整个函数 但希望有一些更用户友好的解决方案 以下软件包都有计算加权中位数的函数 aroma light isotone limma cwhm
  • 更改绘图区域背景颜色

    我想使用我们公司的颜色在 R 中制作一个图表 这意味着所有图表的背景应为浅蓝色 但绘图区域应为白色 我正在寻找答案 发现绘制一个矩形就可以完成这项工作 几乎 然而 绘图区域现在是白色的 并且图形不再可见 这可能吗 getSymbols SP
  • 如何使用plotmath更新ggplot图例标签

    我正在尝试更新ggplot要使用的图例标签plotmath但是 当我这样做时 它将之前组合的图例分成两部分 通过一个例子可能更容易理解 test data and the default plot gives the correct col
  • 斯皮尔曼相关性和联系

    我正在一小组配对排名上计算斯皮尔曼的 rho 斯皮尔曼因处理领带不当而闻名 例如 取2组8个排名 即使两组中有6个是平局 相关性仍然很高 gt cor test c 1 2 3 4 5 6 7 8 c 0 0 0 0 0 0 7 8 met
  • 如何使用 dplyr 管道将额外参数传递给 purrr::map

    我有以下数据框和功能 param df lt data frame x 1 3 0 1 y 3 1 0 2 param df gt x y gt 1 1 1 2 8 gt 2 2 1 1 8 gt 3 3 1 0 8 my function
  • R 中图周围的圆形边框

    我需要在情节周围放置平滑的边框 代码 plot 0 10 0 10 type n xlab X ylab Y box figure col blue 除了简单的蓝线 我如何放置带有圆角的平滑灰线 非常感谢 library grid plot
  • 如何从 R 中的多列中获取计数?

    我有一个包含三列的数据框 State1 State2 State3 有没有一种方法可以使用所有三列 最好使用 dplyr 并且没有显式循环 来获取一个数据帧中每个状态的计数 我只知道如何做一栏 df gt group by State1 g
  • ggplot 的每个方面都有不同的 `geom_hline()`

    这个问题在这里已经有答案了 library tidyverse ggplot mpg aes cty hwy geom point facet grid year fl geom hline yintercept mean mpg hwy
  • 使用非标准评估公式

    我正在创建一个使用的包非标准评价 http adv r had co nz Computing on the language html跟踪列的含义 该包在函数之间传递数据框 这些函数执行同一组列的各种操作 非标准评估对此非常有用 my s
  • 如何在 R 中 fork 进程

    我试图了解 R 多核包实现的分叉系统 包的例子是 p lt fork if inherits p masterProcess cat I m a child Sys getpid n exit I was a child cat I m t
  • 将动物园转换为数据框

    我转换了一个zoo time series到数据框中R日期成为数据框的索引 有没有办法将日期表示为数据框中的普通列 monthly df lt data frame monthly zoo head monthly zoo head mon
  • 函数速度测试的奇怪结果

    我编写了一个使用递归来查找最大公因数 分母 的函数 gt gcd function a b if length a length b gt 1 warning Only scalars allowed using first element
  • ggplot2 的 fortify 函数出错

    我在 ggplot2 中使用 fortify 方法时收到此错误 Error in function classes fdef mtable unable to find an inherited method for function pr

随机推荐

  • OAuth2 oauth_client_details表字段的详细说明

    OAuth2 oauth client details表字段的详细说明 clientdetails 妖四灵 Shuen的博客 CSDN博客
  • QT中https 访问

    QT 中支持https 在原有的http的代码基础上需要加上如下代码块 QNetworkRequest request QSslConfiguration conf QSslConfiguration defaultConfiguratio
  • WSL 使用的文件没有权限无法删除

    转载于 https www cnblogs com jffun blog p 11255096 html
  • Vite 和 Webpack 的区别

    Vite 和 Webpack 都是前端打包工具 它们的作用类似 但实现方式和使用方法有所不同 以下是它们之间的一些区别 构建速度 Vite 的构建速度比 Webpack 更快 因为 Vite 在开发环境下使用了浏览器原生的 ES 模块加载
  • 浏览器油猴插件Tampermonkey下载安装

    没有插件的浏览器 不是真正的浏览器 当我们的浏览器装上插件之后 瞬间强大了许多 下面给大家介绍一下浏览器插件神器油猴插件Tampermonkey的下载安装 油猴Tampermonkey插件下载安装方法一 直接打开油猴Tampermonkey
  • 为什么要用box-sizing: border-box?一般什么时候用?

    1 新建一个HTML文档 并定义一个块元素 CSS示例 normal width 100px height 100px background blue 步骤阅读 2 保存文件 预览效果 步骤阅读 3 再次加入一个DIV并在原有的CSS上复制
  • 二十三、SQL 数据分析实战(10个简单的SQL题目)

    文章目录 题目1 比赛名单整理 题目2 热门游戏排行 题目3 社区生鲜App覆盖分析 题目4 社区团购行为分析 题目5 统计字符出现次数 题目6 找出各类别商品销量最高的商品 题目7 找出每个部门薪资第二高的员工 题目8 游戏玩家登录情况分
  • Java面向对象编程

    在单处理器系统中 如果同时存在有12个进程 则处于就绪队列中的进程数量最多为 A 1 B 9 C 10 D 11 答案 D 以下关于多线程的叙述中错误的是 A 线程同步的方法包括使用临界区 互斥量 信号量等 B 两个线程同时对简单类型全局变
  • 约瑟夫环问题(报数问题)

    先说一下什么是约瑟夫环问题 这是百科的解释 约瑟夫环 约瑟夫问题 是一个数学的应用问题 已知n个人 以编号1 2 3 n分别表示 围坐在一张圆桌周围 从编号为k的人开始报数 数到m的那个人出列 他的下一个人又从1开始报数 数到m的那个人又出
  • 如何在csdn免费下载资料?

    1 可以在个人设置里 绑定手机账号奖励整整50分 点下头像一个人中心一账号设置一手机绑定 2 完成任务 任务要在http task csdn net 里才能看到 3 上传有效 有效啊 别上个广告啊 非法啥的 反而还扣了 资源 4 评论资源
  • QT 5.8

    QT与Qt Creator 前者是框架 类似与MFC 而后者是QT的编译器 也可以使用Visual studio编辑 编译需要其他的 Index of new archive qt 5 8 5 8 0
  • MySQL的体系架构

    文章目录 前言 MySQL的Server层 MySQL的存储引擎 1 InnoDB 存储引擎 2 MyISAM 存储引擎 3 Memory 存储引擎 前言 在学习一种事务之前 我们需要先了解事物的基本组成结构 清楚了事物的基本组成结构之后
  • Linux或者ubuntu子系统中OpenMPI的安装

    在Linux中安装MPI Message Passing Interface 需要以下步骤 检查依赖项 首先 确保系统已经安装了必要的编译工具和库文件 运行以下命令更新软件包并安装所需依赖项 sudo apt update sudo apt
  • 【C语言】实现字符串逆序输出(包含空格的字符串)

    1 目的 实现字符串的逆序输出 比如I believe you 变为you believe I的形式 2 基本思路 这里我们先创建一个可以实现逆序打印的函数 将字符串逆序变为 uoy eveileb I 然后再将每个字符串逆序 从而变为yo
  • java 基础重学(一)-面向对象

    一 什么是面向过程 面向过程 是一种以事件为中心的编程思想 编程的时候把解决问题的步骤分析出来 然后用函数把这些步骤实现 在一步一步的具体步骤中再按顺序调用函数 自顶向下 逐步求精 模块化封装函数主张按功能把软件系统逐步细分 对每个涉及到的
  • 华为OD机试真题 Java 实现【整数对最小和】【2022Q4 100分】,附详细解题思路

    一 题目描述 给定两个整数数组array1 array2 数组元素按升序排列 假设从array1 array2中分别取出一个元素可构成一对元素 现在需要取出k对元素 并对取出的所有元素求和 计算和的最小值 注意 两对元素如果对应于array
  • 在win10, win11 家庭版中安装远程桌面服务

    win10 win11 家庭版中提供远程桌面服务 简介 在windows家庭版中 是不提供远程桌面服务的 你没有办法使用远程桌面连接到windows家庭版中 当然 你可用升级windows 版本到专业版 这样就可用享受到windows自带的
  • MySQL从5.6版本到5.7版本的升级过程

    MySQL从5 6版本到5 7版本的升级过程 二进制升级过程 1 介绍 此处因原有的版本就是5 6的 就不再赘述5 6的安装过程了 原有数据库5 6的目录情况 basedir usr local mysql base目录是做的软链 指向my
  • Matplotlib输出中文显示问题

    Matplotlib输出中文显示问题 试过觉得有用的办法 http www 360doc com content 14 0713 12 16740871 394080556 shtml
  • ggplot2读书笔记6:第四章 语法 基础理论

    碎碎念ing 终于结束了 ggplot2 的第一部分 Getting Started 今天开始看第二部分 语法 第四章 Mastering the Grammar 介绍了ggplot2的一些基础语法知识 大概是对前期内容在理论上做一个总结