R语言学习--R for Data Science - 2.1 ggplot2

2022-04-01 21:25:57 浏览数 (1)

上一节介绍了跟练所需的软件,R包和数据,这节开始跟练书中的第一块内容:数据可视化

我们分析数据是为了从数据中发现问题或者得到结论,而图形则能给我们带来更多直观的信息。生信分析也不例外,如单细胞测序,数万个细胞,每个细胞上万基因的不同表达水平所构成的数据是非常大的,直接通过数据表格几乎不可能发现有意义的信息,但是我们通过降维可视化可以清晰的看到每个样本的细胞组成,基因表达分布等多层次的信息,能帮助我们更好的理解和分析问题。

用的R包和数据

ggplot2,是这本书的作者之一Hadley Wickham开发的,包括tidyverse,他也是rstudio的首席科学家;ggplot2是个作图功能很强大的R包,底层是Wilkinson图形语法,通过将图形分解为数据映射(数据如何显示在图上),清晰定义了每个图层的语法。

mpg data frame,这个数据框是ggplot2包自带的,数据框是R中的一种数据结构,其每一列是一个变量,每一行是一个观测。mpg数据框包含美国环保机构针对38种型号汽车的观测数据,其中每一列的列名就是变量名,如displ是汽车引擎大小,单位是L;hwy是汽车在高速路上的燃料效率,单位是英里/加仑。这个数据框的具体信息可以通过在console中输入?mpg查看,R中的函数和自带的数据包都可以通过在其名字前加?来查看帮助信息,注意?也必须是英文字符。

代码语言:javascript复制
> 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… f        18    29 p     comp…
 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… 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 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
# … with 224 more rows

使用下面代码作图

代码语言:javascript复制
ggplot(data = mpg)   
  geom_point(mapping = aes(x = displ, y = hwy))
通过上图,我们可以看到汽车引擎大小和其在高速路燃油效率的关系。通过上图,我们可以看到汽车引擎大小和其在高速路燃油效率的关系。

图形如何产生的?

在上面这张图的代码中,首先使用了ggplot()这个函数,它的功能是创建一个空白坐标系,其xy轴可以通过后续图层添加,它的第一个参数是作图用的数据,用ggplot(data = mpg)就会生成如下图片,是个空白背景:

接下来,通过geom_point()函数添加数据的映射,这里的point是散点图,bar则是条形图,还有很多种形状可以通过这种方式添加;geom函数有个mapping参数,需要使用函数aes()来传递参数给mapping,aes()中需指定x和y参数代表了数据中的哪个变量,如mapping = aes(x = displ, y = hwy),geom函数会继承在ggplot函数中传入的数据,并在这个数据集中寻找指定的x和y变量。

作图模板

代码语言:javascript复制
ggplot(data = <DATA>)   
  <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))

习题练习

1. How many rows are in mpg? How many columns?

这道题主要考察如何查看数据框信息,下面列出3种方法:

#1. 因为这里的对象mpg的数据结构是tibble,可以直接运行对象名:

代码语言:javascript复制
> mpg
# A tibble: 234 × 11 (这里显示了行数 x 列数)
   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 manu… f        21    29 p     comp…
 3 audi         a4           2    2008     4 manu… 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 manu… f        18    26 p     comp…
 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
# … with 224 more rows

#2. 使用dim()函数:

代码语言:javascript复制
> dim(mpg)
[1] 234  11

#3. 使用str()函数:

代码语言:javascript复制
> str(mpg)
tibble [234 × 11] (S3: tbl_df/tbl/data.frame)
 $ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
 $ model       : chr [1:234] "a4" "a4" "a4" "a4" ...
 $ displ       : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
 $ year        : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
 $ cyl         : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
 $ trans       : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
 $ drv         : chr [1:234] "f" "f" "f" "f" ...
 $ cty         : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
 $ hwy         : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
 $ fl          : chr [1:234] "p" "p" "p" "p" ...
 $ class       : chr [1:234] "compact" "compact" "compact" "compact" ...

2. What does the drv variable describe? Read the help for ?mpg to find out.

这里告诉我们可以利用帮助文档查找数据集的相关信息,运行?mpg即可

可以看到帮助栏中能够找到drv这个变量的含义,它代表汽车的驱动类型。可以看到帮助栏中能够找到drv这个变量的含义,它代表汽车的驱动类型。

3. Make a scatterplot of hwy vs cyl.

用其他变量作图,直接套模板即可

代码语言:javascript复制
ggplot(data = mpg)   
  geom_point(mapping = aes(x = cyl, y = hwy))

4. What happens if you make a scatterplot of class vs drv? Why is the plot not useful?

先作图看一下:

代码语言:javascript复制
ggplot(data = mpg)   
  geom_point(mapping = aes(x = class, y = drv))

毫无规律,通过查看帮助知道class代表车型,车型和车的驱动类型本身就没有相关性,这个图自然也就没什么意义了。提示我们作图时需要考虑变量的相关性,思考要通过图形表达什么信息。

参考资料:

https://r4ds.had.co.nz/index.html

0 人点赞