zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

R绘图 | 表达矩阵画箱线图

2023-03-07 09:16:31 时间

变量可以分为很多种,如连续变量、分类变量等。当数据集中包含了分类变量和连续变量时,我们想了解连续变量是怎样随着不同的分类变量水平变化而变化,这时散点图中则会出现大量重叠,而箱式图则可以更清晰的展示这类数据。

箱式图用于多组数据平均水平和变异程度的直观分析比较。每组数据均可呈现其最小值、最大值、平均水平,最小值、最大值形成间距都可以反映数据的变异程度。

主要函数为geom_boxplot()。

本期我们以表达矩阵为例来做箱式图。

1 原始数据

常规的表达矩阵每一行为一个基因,每一列为一个样本,如果拿到的数据不符合上述规则,首先需要对数据进行调整。

如果每一行为一个样本,每一列为一个基因则需要使用t()进行转置。

标准的表达矩阵如下所示

sample1

sample2

sample3

gene1

1.82

2.24

0.98

gene2

1.01

1.26

1.25

gene3

-2.31

-3.33

-2.14

接下来我们使用rnorm()生成一个表达矩阵。

set.seed(200) # 设定种子,保证每次rnorm运行的结果一样(保证结果可重复)
exp = matrix(rnorm(24),ncol = 8) # 随机产生24个数字,分布在8列
exp = round(exp,2) # 取两位小数
rownames(exp) = paste0("gene",1:3) 
colnames(exp) = paste0("sample",1:8)

2 数据处理

2.1 添加分组信息

library(tidyr)
library(tibble)
library(dplyr)
dat = t(exp) %>% # “%>%”为管道符,相当于linux中的“|”
  as.data.frame() %>%  # 只有数据框才能使用将行名变成一列的命令
  rownames_to_column() %>%  # 将行名变成一列
  mutate(group = rep(c("control","treatment"),each = 4)) # 新增group列

转置后的表达矩阵

2.2 宽数据转换长数据

宽数据是比较常用的数据收集与储存样式,而长数据常用于画图,此处我们采用pivot_longer()进行转换,更多宽变长方法可参考简书教程[1]

pivot_longer() "lengthens" data, increasing the number of rows and decreasing the number of columns.

pdat = pivot_longer(data = dat,
                    cols = starts_with("gene"), # 宽变长 选择以"gene"为开头的行
                    names_to = "gene", # 新的列名
                    values_to = "count") # 其余的列名

长数据

3 作图

library(ggplot2)
p = ggplot(pdat,aes(gene,count))+
  geom_boxplot(aes(fill = group))+ # 绘制箱线图
  geom_jitter()+ # 叠加扰动点图
  theme_bw() # 主题设置
p
p + facet_wrap(~gene,scales = "free") # 以gene分面

最后也可以采用我们上期提到的ggThemeAssitant进行美化。

参考资料

[1] 简书教程: https://www.jianshu.com/p/e941f12179f3