2第一步
2.1简介
如何用 ggplot2 尽快生成有用的图形呢?通过学习[ggplot()](https://ggplot2.tidyverse.org/reference/ggplot.html)
一些有用的基础“方法”,以绘制出最重要的图形。[ggplot()](https://ggplot2.tidyverse.org/reference/ggplot.html)
可以只用几行代码就可以制作复杂的图形,因为它基于丰富的基础理论,即图形语法。
在节中,您将学习:
-
关于ggplot2 中包含的
mpg
数据集。 -
每个图的三个关键组成部分:数据、图形属性和几何变量。
-
如何向图形中添加图形属性。
-
如何使用分面。
-
使用各种不同的几何图形来创建不同类型的绘图。
-
如何修改轴。
-
除了显示之外,您还可以对绘图对象进行其他操作,例如如何保存输出。
2.2 耗油量数据
主要使用的是ggplot2内置的一组数据:mpg
。它收集美国环境保护署 1999 年和 2008 年流行车型的燃油信息,http://fueleconomy.gov。您可以通过加载 ggplot2 来访问数据:
library(ggplot2)
mpg
#> # A tibble: 234 × 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 compa…
#> 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
#> 3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
#> 4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
#> 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa…
#> 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa…
#> # … with 228 more rows
变量大多是名副其实的:
-
cty
和hwy
记录城市和高速公路行驶的耗油量(英里/加仑)。 -
displ
是发动机排量(以升为单位)。 -
drv
是驱动系统:前驱 (f)、后驱(r) 或四驱 (4)。 -
model
是汽车的型号。有 38 款车型,它们在 1999 年至 2008 年之间每年都会推出新版本。 -
class
是描述汽车“类型”的分类变量:两人座、SUV、紧凑型等。
从这个数据集中可以提出了许多有趣的问题。发动机尺寸和耗油量有什么关系?某些制造商是否比其他制造商更关心耗油量?耗油量在过去十年中是否有所改善?我们将其中一些问题,并在此过程中学习如何使用 ggplot2 创建一些基本绘图技巧。
2.3 知识要点
ggplot2 图有三个关键组成部分:
-
数据;
-
图形属性映射,数据中的变量如何映射到图层的图形属性上;
-
集合对象,至少一层,用于指定绘图所用的几何对象;
这是一个简单的例子:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point()
image
这会产生一个由以下定义的散点图:
- 数据:
mpg
。 - 图形属性映射:发动机尺寸映射到 x 轴,耗油量映射到 y 轴。
- 几何对象:散点图。
请注意此函数调用的结构:数据和图形属性映射在[ggplot()](https://ggplot2.tidyverse.org/reference/ggplot.html)
函数中,然后通过+
添加图层。这是一个重要的模式,随着您对 ggplot2 了解,您将通过添加更多类型的组件来构建越来越复杂的图。
几乎每个图都将变量映射到x
和 y
轴,因此命名这些图形属性很乏味,因此[aes()](https://ggplot2.tidyverse.org/reference/aes.html)
前两个未命名的参数将映射到x
and y
。这意味着以下代码与上面的示例相同:
ggplot(mpg, aes(displ, hwy)) +
geom_point()
后面将一直使用这种格式,所以不要忘记[aes()](https://ggplot2.tidyverse.org/reference/aes.html)
的前两个参数是x
and y
。
该图显示出很强的相关性:随着发动机尺寸变大,耗油量变差。还有一些有趣的异常值:一些配备大型发动机的汽车的耗油量高于平均水平。你认为它们是什么类型的汽车?
练习
- 你会如何形容
cty
和hwy
之间的关系?您对从该图形中得出结论有什么疑问吗?ggplot(mpg, aes(model, manufacturer)) + geom_point()
是什么图形?有用吗?您如何修改数据从而展示更多的信息?- 描述以下每个图的数据、图形属性映射和几何对象。您需要猜测一下,因为您还没有看到所有的数据集和函数,但请使用您的常识!看看您是否可以在运行代码之前预测绘图的样子。
1. `ggplot(mpg, aes(cty, hwy)) + geom_point()`
2. `ggplot(diamonds, aes(carat, price)) + geom_point()`
3. `ggplot(economics, aes(date, unemploy)) + geom_line()`
4. `ggplot(mpg, aes(cty)) + geom_histogram()`
2.4 颜色、大小、形状和其他图形属性
要向绘图添加其他变量,我们可以使用其他图形属性,如颜色、形状和大小( ggplot2 支持英式拼写和美式拼写,如colour与color)。它们图形属性设置方法与x
和y
相同,并添加到对[aes()](https://ggplot2.tidyverse.org/reference/aes.html)
函数的调用中:
aes(displ, hwy, colour = class)
aes(displ, hwy, shape = drv)
aes(displ, hwy, size = cyl)
ggplot2 负责将数据(例如,'f'、'r'、'4')转换为具有标度的图形属性(例如,'red'、'yellow'、'green')。图中的每个图形属性映射都有一个标度。比例尺还负责创建指南、坐标轴或图例,在您阅读图形时,将图形属性值转换回数据值。现在,我们将使用 ggplot2 提供的默认标度。
要了解有关之前散点图中更多的信息,我们可以将车辆类型变量映射到颜色:
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()
image
这为每个点提供了与其类别相对应的颜色。图例允许我们从颜色中读取数据值,向我们展示了对于发动机尺寸而言具有异常耗油量的汽车组是两个座位:发动机大但车身轻的汽车。
如果要将图形属性设置为固定值而不使用标度,将代码写在[aes()](https://ggplot2.tidyverse.org/reference/aes.html)
外侧即可. 比较以下两个图:
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = "blue"))
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")
image
image
在第一个图中,“blue”被标量转换为粉红色,并添加了一个图例。在第二个图中,点被赋予为蓝色。这个技巧很重要,您将在设的映射中了解更多相关信息。查看[vignette("ggplot2-specs")](https://ggplot2.tidyverse.org/articles/ggplot2-specs.html)
颜色和其他图形属性所需的值。
不同类型的变量对应不同类型的图形属性。例如,颜色和形状适用于分类变量,而尺寸适用于连续变量。数据量也有影响:如果数据很多,就很难区分不同的组。另一种解决方案是使用分面,如下所述。
在绘图中使用图形属性时,尽量少用。颜色和形状大小的同时混合是,其中关系很难看出,所以在使用图形属性时要克制。与其试图制作一个非常复杂的图形来一次展示所有内容,不如看看您是否可以创建一系列简单的图形来说明。
2.4.1 练习
- 尝试使用颜色、形状和大小图形属性。当您将它们映射到连续值时会发生什么?分类值呢?当你在一个图形中使用不止一种图形属性时会发生什么?
- 如果将连续变量映射到形状会发生什么?为什么?如果把
trans
映射到形状会发生什么?为什么?- 驱动系统与耗油量有何关系?驱动系统与发动机大小和车辆类型有何关系?
2.5 分面
分面可以在图像中展示分类变量。Faceting 将数据拆分为若干子集,然后为每个子集显示相同的图形来创建图形表。您将后续中了解有关分面的更多信息,但它是如此有用的技术,您需要立即了解它的基础应用。
有两种类型的分面:网格型(facet_grid())和封装型(facet_wrap())。封装型比较常用,所以我们将在这里讨论它,稍后您可以了解网格分面。要刻面图,您只需添加一个带有[facet_wrap()](https://ggplot2.tidyverse.org/reference/facet_wrap.html)
的分面,它采用前面带有~
的变量名称。
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(~class)
image
您可能想知道何时使用分面以及何时使用图形属性。您将在延伸中详细了解每种方法的相对优势和劣势。
2.5.1练习
- 如果您尝试通过连续变量进行分面,
hwy
会发生什么?cyl
怎么样?关键区别是什么?- 使用分面来探索耗油量、发动机尺寸和气缸数三者之间的关系。气缸数分面如何改变您对发动机尺寸和耗油量之间关系的评估?
- 阅读
[facet_wrap()](https://ggplot2.tidyverse.org/reference/facet_wrap.html)
的文档。您可以使用哪些参数来控制输出中出现的行数和列数?- 在
[facet_wrap()](https://ggplot2.tidyverse.org/reference/facet_wrap.html)
中scales
参数是什么呢?你什么时候可以使用它?
网友评论