R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet

R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet

单图层散点图

这一讲我们从最简单的散点图开始介绍ggplot2应用的基础,首先我们下载并应用tidyverse包:

install.packages("tidyverse")
library(tidyverse)

用tidyverse自带的数据mpg举例,

> ggplot2::mpg
# A tibble: 234 x 11
   manufacturer model displ  year   cyl trans drv     cty
   <chr>        <chr> <dbl> <int> <int> <chr> <chr> <int>
 1 audi         a4      1.8  1999     4 auto~ f        18
 2 audi         a4      1.8  1999     4 manu~ f        21
 3 audi         a4      2    2008     4 manu~ f        20
 4 audi         a4      2    2008     4 auto~ f        21
 5 audi         a4      2.8  1999     6 auto~ f        16
 6 audi         a4      2.8  1999     6 manu~ f        18
 7 audi         a4      3.1  2008     6 auto~ f        18
 8 audi         a4 q~   1.8  1999     4 manu~ 4        18
 9 audi         a4 q~   1.8  1999     4 auto~ 4        16
10 audi         a4 q~   2    2008     4 manu~ 4        20
# ... with 224 more rows, and 3 more variables:
#   hwy <int>, fl <chr>, class <chr>

在这个数据中,我们比较关注displ与hwy这两个变量,displ表示引擎尺寸(升),hwy表示高速路上的燃油效率(英里/加仑)。为了展示这两个变量之间的关系,我们先画一个简单的散点图:

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

在这里插入图片描述

因为我们只想要一个散点图,所以用minimal code,而不是用上一讲介绍的Layered Grammar,如果用Layered Grammar来写那就是

ggplot()+
  layer(data = mpg,mapping = aes(x = displ, y = hwy),
        geom = "point",stat = "identity",position="identity")+
  scale_y_continuous()+
  scale_x_continuous()+
  coord_cartesian()

这段代码的输出与minimal code输出的图像一样,但这段代码是严格按照Layered Grammar来写的,ggplot()开头表示接下来要应用图形语法创建图形对象,第一步是创建图层,每一个图层包含数据、映射(aesthetic mapping)、几何对象、统计变换、位置调整;第二步是指定scale以及坐标系统;对比Layered Grammar与minimal code,大家可以开始建立一些直觉,哪些是可以省略的,哪些是minimal requirement,后续的代码样例都用minimal code。

整体来看这个散点图是有一个下降的趋势的,但右边中部的哪些点很可能导致线性拟合残差出现非线性pattern,因此我们希望引入另一个变量能解释这种现象,于是我们可以把不同车型对应的散点用不同颜色表示:

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

在这里插入图片描述
这样我们就可以分车型比较引擎尺寸与燃油效率的关系了。

大家可以自行尝试在aesthetics mapping中把color=class改为alpha=class,shape=class或者size=class,这三个语句可以分别用透明度、点型、点的大小表示不同的车型。

单图层散点图的facet

如果我们不想把这些车型综合到一张图下比较,而是用subplot展示每一个车型引擎尺寸与燃油效率的关系,那么我们就需要创建facet了。

Minimal Code:

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

Layered Grammar:

ggplot()+
  layer(data = mpg,mapping = aes(x = displ, y = hwy),
        geom = "point",stat = "identity",position="identity")+
  facet_wrap(~class,nrow = 2)+
  scale_y_continuous()+
  scale_x_continuous()+
  coord_cartesian()

在这里插入图片描述
facet_wrap(~class,nrow = 2)表示用车型的数据作为subplot创建facet,subplot均匀排列为两行。

也可以使用两个变量创建facet,比如把facet_wrap(~class,nrow = 2)改成facet_grid(drv~cyl),得到的结果就是

在这里插入图片描述
如果想去掉行,只保留列,可以用facet_grid(.~cyl)替换,
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44207974/article/details/112856550