简介
“简单的图表为数据分析师提供了比任何其他设备更多的信息。” - John Tukey
本章将教您如何使用ggplot2可视化您的数据。 R有几个用于制作图形的系统,但ggplot2是最优雅和最通用的系统之一。 ggplot2实现了图形语法,它是一个用于描述和构建图形的系统。如果您想在开始之前了解更多关于ggplot2理论基础的内容,我建议您阅读“The Layered Grammar of Graphics”,
数据准备
本章重点介绍ggplot2,它是tidyverse的核心成员之一。 要访问我们将在本章中使用的数据集,请通过运行以下代码加载tidyverse:
> library(tidyverse)-- Attaching packages --------------------------------------- tidyverse 1.2.1 --√ ggplot2 3.0.0 √ purrr 0.2.5√ tibble 1.4.2 √ dplyr 0.7.7√ tidyr 0.8.1 √ stringr 1.3.1√ readr 1.1.1 √ forcats 0.3.0-- Conflicts ------------------------------------------ tidyverse_conflicts() --x dplyr::filter() masks stats::filter()x dplyr::lag() masks stats::lag()
这一行代码加载核心整数。 它还告诉您tidyverse中的哪些函数与基本R(或您可能已加载的其他包)中的函数冲突。
如果您运行此代码并收到错误消息“没有名为'tidyverse'的软件包”,则需要先安装它,然后再次运行library()。
install.packages("tidyverse") library(tidyverse)
您只需要安装一次包,但每次开始新会话时都需要重新加载它。如果我们需要明确函数(或数据集)的来源,我们将使用特殊形式的包:: function()。 例如,ggplot2 :: ggplot()明确告诉您我们正在使用ggplot2包中的ggplot()函数。
第一步
让我们用我们的第一个图表回答一个问题:大型发动机的汽车比小型发动机的汽车使用更多燃料吗? 你可能已经有了答案,但试着让你的答案准确。 发动机尺寸和燃油效率之间的关系是什么样的? 这是积极的吗? 负?线性?非线性?
mpg数据框
您可以使用ggplot2(又名ggplot2 :: mpg)中的mpg数据框测试您的答案。 数据框是变量(列)和观察(行)的矩形集合。 mpg包含美国环境保护局收集的38种汽车型号的观察结果。
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.8 1999 4 auto(~ f 18 29 p comp~ 2 audi a4 1.8 1999 4 manua~ f 21 29 p comp~ 3 audi a4 2 2008 4 manua~ f 20 31 p comp~ 4 audi a4 2 2008 4 auto(~ f 21 30 p comp~ 5 audi a4 2.8 1999 6 auto(~ f 16 26 p comp~ 6 audi a4 2.8 1999 6 manua~ f 18 26 p comp~ 7 audi a4 3.1 2008 6 auto(~ f 18 27 p comp~ 8 audi a4 qua~ 1.8 1999 4 manua~ 4 18 26 p comp~ 9 audi a4 qua~ 1.8 1999 4 auto(~ 4 16 25 p comp~ 10 audi a4 qua~ 2 2008 4 manua~ 4 20 28 p comp~ # ... with 224 more rows
mpg中的变量包括:汽车的发动机尺寸,以升为单位。一辆汽车在高速公路上的燃油效率,以每加仑英里数计算。 当行驶相同距离时,具有低燃料效率的汽车比具有高燃料效率的汽车消耗更多燃料。
要了解有关mpg的更多信息,请通过运行?mpg打开其帮助页面。
创建ggplot
要绘制mpg,请运行此代码将displ放在x轴上,将hwy放在y轴上:
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
该图显示了发动机尺寸(displ)和燃料效率(hwy)之间的负相关关系。换句话说,大型发动机的汽车使用更多的燃料。这是否证实或驳斥了您关于燃油效率和发动机尺寸的假设?
使用ggplot2,您可以使用函数ggplot()开始绘图。 ggplot()创建一个可以添加图层的坐标系。 ggplot()的第一个参数是要在图中使用的数据集。所以ggplot(data = mpg)会创建一个空图。
您可以通过向ggplot()添加一个或多个图层来完成图表。函数geom_point()为绘图添加一层点,从而创建散点图。 ggplot2附带了许多geom函数,每个函数都为绘图添加了不同类型的图层。
ggplot2中的每个geom函数都采用映射参数。这定义了数据集中的变量如何映射到可视属性。 mapping参数始终与aes()配对,aes()的x和y参数指定要映射到x和y轴的变量。 ggplot2在data参数中查找映射变量,在本例中为mpg。
ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
问题:
1.运行ggplot(data = mpg)。 你看到了什么?
2.mpg中有多少行? 多少列?
3.drv变量描述了什么? 阅读帮助?mpg找出答案。
4.制作hwy vs cyl的散点图。
5.如果你制作一个类vs drv的散点图会发生什么? 为什么情节没用?
答案:
1.仅仅运行ggplot(data = mpg),将会出现一个只有背景的空图。
2.运行dim(mpg),发现mpg有234行,14列。
3.使用?drv,提示我们drv变量是汽车的驱动属性,f =前轮驱动,r =后轮驱动。
4和5.类属性不适合画散点图
映射
“图片的最大价值在于它迫使我们注意到我们从未预料到的东西。” - 约翰图基
在下图中,一组点(以红色突出显示)似乎超出了线性趋势。 这些车的里程比您预期的要高。 你怎么解释这些车?
让我们假设汽车是混合动力车。测试这个假设的一种方法是查看每辆车的等级值。 mpg数据集的类变量将汽车分类为组,例如紧凑型,中型和SUV。如果外围点是混合动力车,它们应该归类为紧凑型轿车,或者可能是微型汽车(请记住,这些数据是在混合动力卡车和SUV变得流行之前收集的)。
您可以将第三个变量(如类)添加到二维散点图中,方法是将其映射到美学。aesthetic是你的情节中物体的视觉属性。美学包括诸如点的大小,形状或颜色之类的东西。您可以通过更改其aesthetic属性的值以不同方式显示一个点(如下所示)。由于我们已经使用 “value” 这个词来描述数据,让我们用“level” 这个词来描述aesthetic属性。在这里,我们更改点的大小,形状和颜色的级别,使点变小,三角形或蓝色:
您可以通过将绘图中的aesthetic映射到数据集中的变量来传达有关数据的信息。 例如,您可以将点的颜色映射到类变量以显示每辆汽车的类。
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))
要将aesthetic映射到变量,请将aesthetic的名称与aes()中的变量名称相关联。 ggplot2将自动为变量的每个唯一值分配唯一级别(这里是一种独特的颜色),这个过程称为缩放。 ggplot2还将添加一个图例,说明哪些级别对应于哪些值。
颜色显示许多不寻常的点是双座汽车。这些车似乎不像混合动力车,实际上是跑车!跑车有大型发动机,如SUV和皮卡车,但小型车身,如中型和小型车,这提高了他们的汽油里程。事后看来,这些汽车不太可能是混合动力车,因为它们有大型发动机。
在上面的例子中,我们将类映射到颜色,但我们可以以相同的方式将类映射到大小。在这种情况下,每个点的确切大小将揭示其类别隶属关系。我们在这里得到一个警告,因为将无序变量(类)映射到有序(大小)并不是一个好主意。
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, size = class))#> Warning: Using size for a discrete variable is not advised.
SUV发生了什么事? ggplot2一次只能使用六个形状。默认情况下,使用形状美学时,其他组将进行非开槽。
对于每种美学,您使用aes()将aesthetic名称与要显示的变量相关联。 aes()函数将图层使用的每个aesthetic映射集合在一起,并将它们传递给图层的映射参数。语法强调了对x和y的有用见解:点的x和y位置本身就是aesthetic,可以映射到变量以显示有关数据的信息的可视属性。
绘制美学图后,ggplot2会处理其余部分。它选择了一个合理的尺度来与美学一起使用,它构建了一个解释水平和价值之间映射的图例。对于x和y美学,ggplot2不会创建图例,但会创建带有刻度线和标签的轴线。轴线充当传奇;它解释了位置和值之间的映射。
您还可以手动设置geom的aesthetic属性。例如,我们可以将我们的情节中的所有点都设为蓝色:
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")
image.png
这里,颜色不传达有关变量的信息,但只改变绘图的外观。 要手动设置美学,请按名称设置美学作为您的几何函数的参数; 即它超出了aes()。 你需要选择一个对美学有意义的关卡:
作为字符串的颜色名称。
以mm为单位的点的大小。
一个点的形状为数字,如下图所示。
如图所示R有25个内置形状,由数字标识。 有一些看似重复:例如,0,15和22都是正方形。 不同之处在于颜色的相互作用。 中空形状(0-14)具有由颜色确定的边界; 实心形状(15-18)充满了颜色; 填充的形状(21-24)具有颜色边框并填充填充。
练习
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))
作者:夜神moon
链接:https://www.jianshu.com/p/057b9f21e2ff
共同学习,写下你的评论
评论加载中...
作者其他优质文章