R for data science (第一章) ②

使用ggplot2进行数据可视化①
使用ggplot2进行数据可视化②

添加其他变量的一种方法是aesthetics。 另一种对分类变量特别有用的方法是将绘图分割为多个子图,每个子图显示一个数据子集。要通过单个变量来划分您的绘图,请使用facet_wrap()。 facet_wrap()的第一个参数应该是一个公式,你用〜后跟一个变量名创建(这里“formula”是R中数据结构的名称,而不是“equation”的同义词)。 传递给facet_wrap()的变量应该是离散的。

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

《R for data science (第一章) ②》

要在两个变量的组合上构建绘图,请将facet_grid()添加到绘图调用中facet_grid()的第一个参数也是一个公式。 这次公式应该包含两个用〜分隔的变量名。

《R for data science (第一章) ②》

如果您不想在行或列维度中进行构面,请使用。 而不是变量名,例如facet_grid(.〜cyl)。

Genometric Objects

两个图包含相同的x变量,相同的y变量,并且都描述相同的数据。 但情节并不完全相同。 每个图使用不同的可视对象来表示数据。 在ggplot2语法中,我们说它们使用不同的geom。

geom是绘图用于表示数据的几何对象。 人们经常根据情节使用的几何类型来描绘情节。 例如,条形图使用条形图,折线图使用线条图,箱形图使用箱形图格栅等。 散点图打破了这一趋势; 他们使用点geom。 如上所述,您可以使用不同的geom来绘制相同的数据。 左边的图使用点geom,右边的图使用光滑的geom,一条适合数据的平滑线。

要更改绘图中的geom,请更改添加到ggplot()的geom函数。 例如,要制作下面的图,您可以使用以下代码:

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

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

《R for data science (第一章) ②》
《R for data science (第一章) ②》

ggplot2中的每个geom函数都有一个mapping参数。 然而,并非每一种aesthetic都适用于每个几何。 您可以设置点的形状,但无法设置线的“形状”。 另一方面,您可以设置线的线型。 geom_smooth()将为您映射到linetype的变量的每个唯一值绘制一个不同的线型,具有不同的线型。



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

《R for data science (第一章) ②》

在这里,geom_smooth()根据他们的drv值将汽车分成三行,描述汽车的动力传动系统。 一行描述具有4值的点,一行描述具有f值的点,并且一行描述具有r值的点。 这里,4代表四轮驱动,f代表前轮驱动,r代表后轮驱动。

如果这听起来很奇怪,我们可以通过在原始数据上叠加线条然后根据drv着色所有内容来使其更清晰。

请注意,此图包含同一图表中的两个geom!我们将很快学会如何在同一个地块中放置多个geoms。ggplot2提供超过30个geoms,扩展包提供更多(请参阅https://www.ggplot2-exts.org)。获得全面概述的最佳方法是ggplot2备忘单,您可以在http://rstudio.com/cheatsheets找到它。要了解有关任何单个geom的更多信息,请使用help:?geom_smooth。许多geom,如geom_smooth(),使用单个几何对象来显示多行数据。对于这些geoms,您可以将组审美设置为分类变量以绘制多个对象。 ggplot2将为分组变量的每个唯一值绘制一个单独的对象。实际上,每当您将美学映射到离散变量时,ggplot2都会自动将这些geoms的数据分组(如线型示例中所示)。依靠这个特征很方便,因为群体aesthetic本身并没有增加传说或区别特征与geoms。

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

《R for data science (第一章) ②》

要在同一个图中显示多个geom,请向ggplot()添加多个geom函数:

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

《R for data science (第一章) ②》 image.png

然而,这在我们的代码中引入了一些重复。 想象一下,如果你想改变y轴来显示cty而不是hwy。 您需要在两个位置更改变量,并且可能忘记更新一个变量。 您可以通过将一组映射传递给ggplot()来避免这种类型的重复。 ggplot2会将这些映射视为适用于图中每个geom的全局映射。 换句话说,此代码将生成与上一代码相同的图:

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

《R for data science (第一章) ②》 image.png

如果将映射放在geom函数中,ggplot2会将它们视为图层的本地映射。 它将使用这些映射来仅扩展或覆盖该层的全局映射。 这使得可以在不同层中显示不同的aesthetics。

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

《R for data science (第一章) ②》

您可以使用相同的想法为每个图层指定不同的数据。 在这里,我们的平滑线仅显示mpg数据集的子集,即小型汽车。 geom_smooth()中的本地数据参数仅覆盖该层的ggplot()中的全局数据参数。

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_point(mapping = aes(color = class)) + 
  geom_smooth(data = filter(mpg, class == "subcompact"), se = FALSE)

《R for data science (第一章) ②》

    原文作者:左手柳叶刀右手小鼠标
    原文地址: https://www.jianshu.com/p/4e9e0a370f52
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞