【学习笔记】R数据科学(R for Data Science)—第1章 使用ggplot2进行数据可视化

2023-10-31

1、代码模板

ggplot(data = <DATA>)+
	<GEOM_FUNCTION>(
		mapping = aes(<MAPPINGS>),
		stat = <STAT>,
		position = <POSITION>
			)+
	<COORDINATE_FUNCTION> +
	<FACET_FUNCTION>

2.为了说明图形语法的工作方式,从头开始构建一个基本图形

a.首先需要有一个数据集,然后(通过统计变换)将其转换为想要显示的信息。

  • 从diamonds数据集开始
  • 使用stat_count()函数为每个切割值计数

b.选择一个几何对象来表示转换后的数据中的每个观测值,然后选择几何对象的图形属性来表示数据中的变量,这会将每个变量的值映射为图形属性的水平。

  • 使用条形表示每个观测值
  • 将每个条形的fill属性映射为…count…变量

c.选择放置几何对象的坐标系。还可以进一步调整几何对象在坐标系中的位置(位置调整),或者将图划分为多个子图(分面)。还可以通过添加一个或多个附加图层对图进行扩展,其中每个附加图层都是用一个数据集、一个几何对象、一个映射集合、一个统计变换和一个位置调整。

  • 在笛卡尔直角坐标系中放置几何对象
  • 映射y值到…count…,x值到cut

使用这种方法能够构建成千上万种独特的图形。

练习题

1.2.4

(1)运行ggplot(data=mpg),你会看到什么?

ggplot(data = mpg)

(2)数据集mpg中有多少行?多少列?

有4种方法可以知道:
mpg
在这里插入图片描述在这里插入图片描述

(3)变量drv的意义是什么?

?mpg
drv

(4)使用hwy和cyl绘制一张散点图。

ggplot(data = mpg)+
	geom_point(mapping = aes(x = hwy, y = cyl))

一张散点图

(5)如果使用class和drv绘制散点图,会发生什么情况?为什么这张图没什么用处?

ggplot(data = mpg)+
	geom_point(mapping = aes(x = class, y = drv))

一张散点图
因为class和drv都是车的类型,用这两个参数作图并不能获得什么有用的信息。
class
drv

1.3

(1)以下这段代码有什么错误?为什么点不是蓝色的?

ggplot(data = mpg) +
	geom_point(
		mapping = aes(x = displ, y = hwy, color = "blue")
	)

一张散点图
改一下color = "blue"的位置,就可以得到蓝色的散点图了:

ggplot(data = mpg) +
	geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

一张散点图

(2)mpg中的哪些变量是分类变量?哪些变量是连续变量?当调用mpg时,如何才能看到这些信息?

分类变量/连续变量
显示为chr的是分类变量,为int的是连续变量。

(3)将一个连续变量映射为color、size和shape。对分类变量和连续变量来说,这些图形属性的表现有什么不同?

color:连续变量使用的是同一种颜色,从浅到深

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cyl))

在这里插入图片描述

size:一个区间的size对应不同的变量

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, size = cyl))

在这里插入图片描述

shape:连续变量映射到shape中会报错

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, shape = cyl))

在这里插入图片描述

(4)如果将同一个变量映射为多个图形属性,会发生什么情况?

将同一个变量(cyl)映射为2个图形属性(color,size):

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cyl,size = cyl))

在这里插入图片描述
将同一个变量(cyl)映射为3个图形属性(color、size、alpha):

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cyl, size = cyl,alpha = cyl))

在这里插入图片描述

(5)stroke这个图形属性的作用是什么?它适用于哪些形状?

边框。适用于21~24的图形样式,因为有边框和填充。

(6)如果将图形属性映射为非变量名对象,比如aes(color = displ < 5),会发生什么情况?

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = displ < 5))

在这里插入图片描述

1.5

(1)如果使用连续变量进行分面,会发生什么情况?

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  facet_grid(drv ~ cyl)

在这里插入图片描述

(2)在使用facet_grid(drv ~ cyl)生成的图中,空白单元的意义是什么?它们和以下代码生成的图有什么关系?

ggplot(data = mpg) +
geom_point(mapping = aes(x = drv, y = cyl))

在这里插入图片描述
空白单元代表没有drv值和cyl值对应的组合。

(3)以下代码会绘制出什么图?“.”的作用是什么?

“.”的作用表示不在行或列的维度分面。“.”在前表示不按行分面,在后表示不按列分面。

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ .)

在这里插入图片描述

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(. ~ cyl)

在这里插入图片描述

(4)查看本节的另一个分面图:

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  facet_wrap(~ class, nrow = 2)

在这里插入图片描述

与使用图形属性相比,使用分面的优势和劣势分别是什么?如果有一个更大的数据集,你将如何权衡这两种方法的优劣?

  • 优势:根据想要观测的变量将数据分为每一分面,显示出每一分面中的趋势及不同分面之间的差别

  • 劣势:由于数据被分割为一个个的分面,数据整体的趋势就看不出来了。

  • 如果有一个更大的数据集,就需要根据目标判断,如果看整体趋势的话就不用分面,如果看单个变量的变化趋势就可以使用分面。

(5)阅读?facet_wrap的帮助页面。nrow和ncol的功能分别是什么?还有哪些选项可以控制分面的布局?为什么函数facet_grid()没有变量nrow和ncol?

facet_wrap()控制分面的布局的选项:
b411fb7984404b30947f091d3b4da.png)在这里插入图片描述facet_grid()控制分面的布局的选项:
在这里插入图片描述在这里插入图片描述因为facet_grid()只会是单列或者单行,不需要nrow和ncol这两个参数。

(6)在使用函数facet_grid()时,一般应该将具有更多唯一值的变量放在列上。为什么这么做呢?

1.6

(1)在绘制折线图、箱线图、直方图和分区图时,应该分别使用哪种几何对象?

geom_line、geom_boxplot、geom_histogram、facet_grid

(2)在脑海中运行以下代码,并预测会有何种输出。接着在R中运行代码,并检查你的预测是否正确。

ggplot(
  data = mpg,
  mapping = aes(x = displ, y = hwy, color = drv)
) +
  geom_point() +
  geom_smooth(se = FALSE)

在这里插入图片描述

(3)show.legend = FALSE的作用是什么?删除它会发生什么情况?为什么要在本章前面的示例中使用这句代码?

ggplot(data = mpg) +
  geom_smooth(
    mapping = aes(x = displ, y = hwy, color = drv),
    show.legend = TRUE
  )

在这里插入图片描述

ggplot(data = mpg) +
  geom_smooth(
    mapping = aes(x = displ, y = hwy, color = drv),
    show.legend = FALSE
  )

在这里插入图片描述

ggplot(data = mpg) +
  geom_smooth(
    mapping = aes(x = displ, y = hwy, color = drv)
  )

在这里插入图片描述

(4)geom_smooth()函数中的se参数的作用是什么?

在这里插入图片描述

(5) 以下代码生成的两张图有什么区别吗?为什么?

没有区别。

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
  geom_point() +
  geom_smooth()

ggplot() +
  geom_point(
    data = mpg,
    mapping = aes(x = displ, y = hwy)
  ) +
  geom_smooth(
    data = mpg,
    mapping = aes(x = displ, y = hwy)
  )

在这里插入图片描述

(6)自己编写R代码来生成以下各图。

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
  geom_point() +
  geom_smooth(se = FALSE)

在这里插入图片描述

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, group = drv)) +
  geom_point() +
  geom_smooth(se = FALSE)

在这里插入图片描述

ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
  geom_point() +
  geom_smooth(se = FALSE)

在这里插入图片描述

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
  geom_point(mapping = aes(color = drv)) +
  geom_smooth(se = FALSE)

在这里插入图片描述

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
  geom_point(mapping = aes(color = drv)) +
  geom_smooth(mapping = aes(linetype = drv),se = FALSE)

在这里插入图片描述

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = drv))

在这里插入图片描述

p1 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
  geom_point(size = 2.5) +
  geom_smooth(se = F, size = 1.5)

p2 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
  geom_point(size = 2.5) +
  geom_smooth(se = F, size = 1.5, mapping = aes(group = drv))

p3 <- ggplot(data = mpg, mapping = aes(displ, hwy, color = drv)) +
  geom_point(size = 2.5) +
  geom_smooth(se = F, size = 1.5, mapping = aes(group = drv, color = drv))

p4 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
  geom_point(size = 2.5, mapping = aes(color = drv)) +
  geom_smooth(se = F, size = 1.5)

p5 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
  geom_point(size = 2.5, mapping = aes(color = drv)) +
  geom_smooth(se = F, size = 1.5, mapping = aes(group = drv, linetype = drv))

p6 <- ggplot(data = mpg, mapping = aes(displ, hwy)) +
  geom_point(size = 2.5, mapping = aes(color = drv))

# 方法一
library(gridExtra)
grid.arrange(p1, p2, p3, p4, p5, p6, nrow = 3, ncol = 2)

方法一:
在这里插入图片描述方法二:

# 方法二
library(cowplot)
plot_grid(p1, p2, p3, p4, p5, p6, nrow = 3, ncol = 2, labels = c("A","B","C","D","E","F"))

在这里插入图片描述
方法三:

#方法三
library(patchwork)
p1 + p2 + p3 + p4 + p5 + p6 + plot_layout(nrow = 3) + plot_annotation(tag_levels = 'A')

在这里插入图片描述

1.7

(1)stat_summary()函数的默认几何对象是什么?不使用统计变换函数的话,如何使用几何对象函数重新生成下列图形?

ggplot(data = diamonds) +
  stat_summary(
    mapping = aes(x = cut, y = depth),
    fun.min = min,
    fun.max = max,
    fun = median
  )

在这里插入图片描述

stat_summary()函数的默认几何对象:pointrange

ggplot(data = diamonds) +
  geom_pointrange(
    mapping = aes(x = cut, y = depth),
    stat = "summary",
    fun.min = min,
    fun.max = max,
    fun = median
  )

(2)geom_col()函数的功能是什么?它和geom_bar()函数有何不同?

在这里插入图片描述

(3)多数几何对象和统计变换都是成对出现的,总是配合使用。仔细阅读文档,列出所有成对的几何对象和统计变换。它们有什么共同之处?

(4)stat_smooth()函数会计算出什么变量?哪些参数可以控制它的行为?

在这里插入图片描述

(5)在比例条形图中,我们需要设定group = 1,这是为什么呢?换句话说,以下两张图会有什么问题?

group = 1表示将这些类别之和作为1,进行按比例画柱状图。

ggplot(data = diamonds) +
  geom_bar(mapping = aes(x = cut, y = ..prop..))

在这里插入图片描述

ggplot(data = diamonds) +
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

在这里插入图片描述

ggplot(data = diamonds) +
  geom_bar(mapping = aes(x = cut, y = ..prop..))

ggplot(data = diamonds) +
  geom_bar(mapping = aes(x = cut, fill = color, y = ..prop..))

P1:
在这里插入图片描述P2:
在这里插入图片描述

1.8

(1)以下图形有什么问题?应该如何改善?

ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
  geom_point()

在这里插入图片描述
因为上图中hwy和cty的值都进行了舍入取整,所以这些点显示在一个网格上时,很多点彼此重叠了。通过将位置调整方式设为“抖动”,可以避免这种网格化排列。有以下两种方法:

#方法一
ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
  geom_point(position = "jitter")

在这里插入图片描述

#方法二
ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
  geom_jitter()

在这里插入图片描述

(2)geom_jitter()使用哪些参数来控制抖动的程度?

在这里插入图片描述

(3)对比geom_jitter()与geom_count()

在这里插入图片描述
在这里插入图片描述

(4)geom_boxplot()函数的默认位置调整方式是什么?创建mpg数据集的可视化表示来演示一下。

在这里插入图片描述

ggplot(data = mpg, mapping = aes(x = drv, y = hwy)) +
  geom_boxplot()

在这里插入图片描述

1.9

(1)使用coord_polar()函数将堆叠式条形图转换为饼图。

ggplot(data = diamonds, mapping = aes(x = cut, fill = color)) +
  geom_bar()

在这里插入图片描述

ggplot(data = diamonds, mapping = aes(x = cut, fill = color)) +
  geom_bar() +
  coord_polar()

在这里插入图片描述

(2)labs()函数的功能是什么?

在这里插入图片描述

(3)coord_quickmap()函数和coord_map()函数的区别是什么?

coord_quickmap() 使用一种更快的近似地图投影。这种近似忽略掉地球的弯曲度并调整经纬度的比例。coord_map() 将3D地图垂直投影到2D平面上,使用的是墨卡托投影。前者更优更快。

(4)下图表明城市和公路燃油效率之间有什么关系?为什么coord_fixed()函数很重要?geom_abline()函数的作用是什么?

ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
  geom_point() +
  geom_abline() +
  coord_fixed()

在这里插入图片描述
图中表明城市和公路燃油效率之间线性相关。

coord_fixed()函数:
在这里插入图片描述
geom_abline()函数:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【学习笔记】R数据科学(R for Data Science)—第1章 使用ggplot2进行数据可视化 的相关文章

随机推荐

  • Alibaba开源框架COLA的个人心得--COLA框架各层职责

    COLA框架各层职责 1 官网定义 1 适配层 Adapter Layer 负责对前端展示 web wireless wap 的路由和适配 对于传统B S系统而言 adapter就相当于MVC中的controller 2 应用层 Appli
  • 快速排序,快速选择排序,选择排序的区别

    选择排序是对整体序列进行排序 快速排序也是对整体序列进行排序 快速选择算法是快速在未排序的数组中寻找第k小 大的元素 快速选择算法和快速排序的思想是找基准点 在基准点左边的都比他小 然后在基准点右边的都比大这样 但是这两个算法的目的不同 所
  • 硬币系列二

    最近搞了一些稀奇硬币 老潘把他们都用手机拍了下来 但是由于手机镜头焦距所限 并不能让硬币充满整个画面 所以很自然的想法就是 把硬币从图片中裁剪出来 一个正常人的做法是 把需要拍摄特写的物品放在纯净颜色的背景上 这种做法其实也有利于后期的抠图
  • STM32--CAN ID过滤器分析

    1 前言 在CAN协议里 报文的标识符不代表节点的地址 而是跟报文的内容相关的 因此 发送者以广播的形式把报文发送给所有的接收者 节点在接收报文时 根据标识符 CAN ID 的值决定软件是否需要该报文 如果需要 就拷贝到SRAM里 如果不需
  • 配合插件flatten-maven-plugin及${revision}属性在maven多模块项目中可进行全局版本号管理

    父pom
  • 【原创】基于FPGA的数码管按键显示(two_key)

    文档说明 一 背景介绍 心理一直有个疙瘩 总感觉不把数码管玩的溜些 觉得少了些什么东西 念头不通畅 说什么也要拿下 于是 有了这篇文档的产生 二 项目需求 选用开发板上的2个按键 当s1按下后 key cnt计数加2 当s2按下后 key
  • 函数printf()的格式转换

    知识点自用 c语言程序设计p43
  • C# 简介(详细)

    C 是一个现代的 通用的 面向对象的编程语言 它是由微软 Microsoft 开发的 由 Ecma 和 ISO 核准认可的 C 是由 Anders Hejlsberg 和他的团队在 Net 框架开发期间开发的 C 是专为公共语言基础结构 C
  • Android Framework学习(七)之Thread类以及常用同步类

    前言 Thread类是Android为线程操作而做的一个封装 代码在Thread cpp中 其中还封装了一些与线程同步相关的类 本篇博客 我们一起学习Thread类以及常用同步类 Thread类 Thread类的构造函数中的有一个canCa
  • 漫画:什么是服务熔断?

    点击上方 程序员小灰 选择 置顶公众号 有趣有内涵的文章第一时间送达 小灰的答题策略 是遇到难题不断思考 不断思考 一直到考试结束为止 可以用下面这张图流程图来表示 大黄的答题策略 是遇到难题先尝试几次思考 如果尝试一定次数不成功 则果断放
  • vcruntime140_1.dll文件下载及安装方法,详细修复方案

    最近在玩游戏跟打开ps的时候 电脑莫名出现上出现了一个名为vcruntime140 1 dll的错误提示 这个错误提示让我无法正常运行一些软件和游戏 给我的电脑使用带来了很大的困扰 第一时间我就在网上翻阅各种关于vcruntime140 1
  • Python机器视觉--OpenCV进阶(核心)--滤波器之卷积介绍

    滤波器之卷积介绍 1 卷积 1 1 什么是图片卷积 图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程 1 2 卷积步长 步长就是卷积核在图像上移动的步幅 上面例子中卷积核每次移动一个像素步长的结果 如果将这个步长修改为2 结
  • 根据指定时间获取时间(日,周,月,季度,年)

    package Test import java text ParseException import java text SimpleDateFormat import java util TODO author biao date 20
  • linux下安装使用libuuid

    UUID简介 UUID含义是通用唯一识别码 Universally Unique Identifier 这 是一个软件建构的标准 也是被开源软件基金会 Open Software Foundation OSF 的组织应用在分布式计算环境 D
  • 基于python的socket通信

    准备阶段 需要导入socket库和threading库 如没有请自行安装 本次任务是在python3 9的编译器下运行 版本可自己选择 并不需要相同 关于socket socket 的典型应用就是 Web 服务器和浏览器 浏览器获取用户输入
  • 01 shell脚本中常用命令

    shell 常用命令 数据检索命令 过滤 grep egrep 字符串检索 cut tr 数据处理命令 数据排序 sort 数据去重 uniq 文本数据合并 paste 数据输出 tee 数据处理 xargs 1 grep 负责从数据源中检
  • Python logging 模块

    Python logging 模块 给大家剖析下Python的logging模块 logging模块是Python内置的一个强大易用的日志模块 简单到你只需要两行代码就能输出一些东西来 import logging logging warn
  • 【SDG精读与代码复现】More Control for Free Image Synthesis with Semantic Diffusion Guidance【SDG】

    SDG精读与代码复现 More Control for Free Image Synthesis with Semantic Diffusion Guidance SDG 一 前言 二 论文介绍 1 文章主旨思想背景介绍 2 方法 3 实验
  • [Eagle API]使用python保存所有文件夹层级信息

    api https www yuque com augus gsjgn eagle api pq0y2y var requestOptions method GET redirect follow fetch http localhost
  • 【学习笔记】R数据科学(R for Data Science)—第1章 使用ggplot2进行数据可视化

    1 代码模板 ggplot data