批量绘制单基因相关性图

介绍

基因的表达调控是一个复杂的、动态的作用网络,具有多向性可逆性多维性等特点,在庞大的基因表达中,可能某些协同(正协同负协同)表达的基因共同参与了某个通路或功能的调控。

在转录组表达数据种寻找这些协同表达的基因有助于发现和挖掘更多的靶基因。我们可以计算两个基因之间的表达相关性来预测基因参与的分子功能或者潜在的调控作用。

在获得样本的转录组数据后,计算基因间的相关性,批量绘图,更加快速的寻找和筛选靶基因。

演练

我们绘制类似于下面这种类型的相关性散点图

批量绘制单基因相关性图 - 图1

开始操作:

首先加载需要用到的 R 包:

  1. # 批量绘制单基因相关性图
  2. # 加载R包
  3. library(tidyverse)
  4. library(ggplot2)
  5. library(ggpubr)
  6. library(cowplot)
  7. library(ggExtra)

读取表达量数据,一般是 normalized 之后的:

批量绘制单基因相关性图 - 图2

每行代表一个基因,每列代表一个样本。

  1. # 设置工作路径
  2. setwd('C:/Users/admin/Desktop/')
  3. # 读取表达量矩阵
  4. expst <- read.delim('batch_cor.txt',header = T,row.names = 1)
  5. # 取对数
  6. new_exp <- log2(expst + 1)
  7. # 转置
  8. t_exp <- t(new_exp)
  9. # 转化为data.frame
  10. t_exp <- as.data.frame(t_exp)
  11. # 选择目的基因
  12. target_gene <- 'MYC'

假如我们想看 MYC 基因和其它基因的相关性,接下来计算相关性系数:

  1. # 计算每个基因与目的基因的相关性系数及p值
  2. cor_list <- list()
  3. for (i in colnames(t_exp)) {
  4. # 提取目的基因表达值
  5. tar <- t_exp[,target_gene]
  6. # 相关性检验
  7. cor_res <- cor(x = tar,y = t_exp[,i],method = 'pearson')
  8. # pvalue
  9. cor_pval <- cor.test(x = tar,y = t_exp[,i])$p.value
  10. # 合并结果
  11. final_res <- data.frame(tar_genename = target_gene,
  12. gene_name = i,
  13. cor_results = cor_res,
  14. cor_pvalue = cor_pval)
  15. # 储存
  16. cor_list[[i]] <- final_res
  17. }
  18. # 合并结果
  19. gene_corres <- do.call('rbind',cor_list)
  20. # 查看结果
  21. head(gene_corres,4)
  22. tar_genename gene_name cor_results cor_pvalue
  23. TMSB10 MYC TMSB10 -0.057883781 1.422938e-01
  24. ACTB MYC ACTB -0.007909501 8.412195e-01
  25. FTL MYC FTL 0.338104705 1.097893e-18
  26. S100A6 MYC S100A6 -0.030446676 4.405127e-01

筛选相关性系数较高或较低的基因:

  1. # 筛选相关性系数> 0.7 或< -0.7 且p值小于0.05的基因
  2. high_cor <- gene_corres %>% filter(abs(cor_results) >= 0.3 ,cor_pvalue < 0.05 )
  3. # 保存基因名
  4. high_corgene <- high_cor$gene_name
  5. # 查看符合条件的基因数量
  6. length(high_corgene)
  7. [1] 252

可以看到筛选到 252 个符合条件的基因,接下来就是批量绘图的重头戏了:

  1. # 批量绘图
  2. plotlst <- list()
  3. for (i in high_corgene) {
  4. # 绘图
  5. p <- ggplot(t_exp,aes_string(x = target_gene,y = i)) +
  6. geom_point(size = 2,color = '#EC0101',alpha = 0.5) +
  7. theme_bw() +
  8. # 主题细节调整
  9. theme(axis.title = element_text(size = 16),
  10. axis.text = element_text(size = 14),
  11. axis.ticks.length = unit(0.25,'cm'),
  12. axis.ticks = element_line(size = 1),
  13. panel.border = element_rect(size = 1.5),
  14. panel.grid = element_blank()
  15. ) +
  16. # 添加回归线
  17. geom_smooth(method = 'lm',se = T,color = '#F9B208',size = 1.5,fill = '#FEA82F') +
  18. # 添加相关性系数及p值
  19. stat_cor(method = "pearson",digits = 3,size=6)
  20. # 添加边际柱形密度图
  21. p1 <- ggMarginal(p,type = "densigram",
  22. xparams = list(binwidth = 0.1, fill = "#B3E283",size = .7),
  23. yparams = list(binwidth = 0.1, fill = "#8AB6D6",size = .7))
  24. # 保存在list里
  25. plotlst[[i]] <- p1
  26. }
  27. # 拼图,4个一行
  28. allplot <- plot_grid(plotlist = plotlst,ncol = 4 ,align = "hv")

这里所有的图以 list 类型储存在 plotlst 里,一般不建议在绘图面板展示,图太多了直接会卡,我们可以保存下来:

  1. # 计算高度
  2. hei = length(plotlst)/4*5
  3. # 保存图片,时间比较久
  4. ggsave(allplot,
  5. filename = 'all-corrplot.pdf',
  6. limitsize = FALSE,
  7. width = 20,
  8. height = hei)

看看前两行结果:

批量绘制单基因相关性图 - 图3

nice!不错。

如果全部结果保存在一个文件里太大,同时运行的时间也比较久的话,我们可以每个 pdf 文件存成一定数量的图,结果多生成一些 pdf 文件,这样也可以减少一些时间,假如我们可以没 12 个图保存为一个文件 pdf:

  1. # 改进,每12个保存为一个pdf文件
  2. for (n in seq(12,252,12)) {
  3. print(n)
  4. # 切分起始位置
  5. nstart <- n - 11
  6. # 1、切分plotlst
  7. tmp_list <- plotlst[nstart:n]
  8. # 2、拼图
  9. temp_plot <- plot_grid(plotlist = tmp_list,ncol = 4 ,align = "hv")
  10. # 3、保存图片
  11. ggsave(temp_plot,
  12. filename = paste(nstart,n,'corrplot.pdf',sep = '_'),
  13. width = 20,
  14. height = 20)
  15. }
  16. [1] 12
  17. [1] 24
  18. [1] 36
  19. ...

这样就很快画完啦!产生了 21 个 pdf 文件,打开一个看看结果:

批量绘制单基因相关性图 - 图4

图小了柱形图就看着太密:

批量绘制单基因相关性图 - 图5

尝试把柱形图去掉试试:

批量绘制单基因相关性图 - 图6