玩转大数据Cook R大数据

R for data science (第一章)①

2018-10-24  本文已影响141人  柳叶刀与小鼠标

Chapter1 使用ggplot2进行数据可视化

简介

“简单的图表为数据分析师提供了比任何其他设备更多的信息。” - 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()函数。

第一步

让我们用我们的第一个图表回答一个问题:大型发动机的汽车比小型发动机的汽车使用更多燃料吗? 你可能已经有了答案,但试着让你的答案准确。 发动机尺寸和燃油效率之间的关系是什么样的? 这是积极的吗? 负?线性?非线性?

您可以使用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打开其帮助页面。

要绘制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"))

注意:color映射应该在aes外。

上一篇下一篇

猜你喜欢

热点阅读