上一节介绍了跟练所需的软件,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即可
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