13  差异结果的热图

热图是一种数据可视化工具,用于展示矩阵数据中的数值大小,通过颜色的深浅或色调变化来表示不同的数值。通常用于生物信息学、统计学和数据分析等领域,以便直观地比较和分析大量数据。

13.1 加载R包

使用rm(list = ls())来清空环境中的所有变量。

library(tidyverse)
library(data.table)
library(Biobase)
library(ComplexHeatmap)
library(circlize)
library(ggplotify)

rm(list = ls())
options(stringsAsFactors = F)
options(future.globals.maxSize = 10000 * 1024^2)

grp_names <- c("Early Stage", "Late Stage")
grp_colors <- c("#8AC786", "#B897CA")
grp_shapes <- c(15, 16)

13.2 导入数据


da_res_signif <- read.csv("./data/result/DA/HCC_Early_vs_Late_limma_select.csv")

ExprSet <- readRDS("./data/result/ExpSetObject/MergeExpSet_VoomSNM_VoomSNM_LIRI-JP_TCGA-LIHC.RDS")

13.3 画图函数

调用ComplexHeatmap::Heatmap函数(Gu, Eils, 和 Schlesner 2016)对差异分析的结果即差异基因进行绘图,采用常见的热图。ComplexHeatmap::Heatmap的详细用法可以直接查看函数帮助文档。除此之外,还使用circlize::colorRamp2函数(Gu 等 2014)调用颜色参数。


get_heatmap <- function(
  object, 
  datsignif,
  group,
  group_names = grp_names,
  group_colors = grp_colors) {
  
  metadata <- pData(object) %>%
    as.data.frame()
  profile <- exprs(object) %>%
    as.data.frame()
  
  colnames(metadata)[which(colnames(metadata) == group)] <- "GroupCompvar"
  
  phen <- metadata %>%
    dplyr::arrange(GroupCompvar, Tumour_Stage, ProjectID)
  phen$GroupCompvar <- factor(phen$GroupCompvar, levels = group_names)
  prof <- profile[rownames(profile) %in% datsignif$FeatureID, 
                  pmatch(phen$SampleID, colnames(profile)), ] %>%
    as.matrix()
  
  project_id <- unique(phen$ProjectID)
  project_colors <- c("#E69F00", "#56B4E9")
  names(project_colors) <- project_id
  
  stage_id <- unique(phen$Tumour_Stage)
  stage_colors <- c("#D51F26", "#272E6A", "#208A42", "#89288F")
  names(stage_colors) <- stage_id  
  
  # scale prof
  prof_scale <- scale(prof, center = T, scale = T)
  
  pl <- ComplexHeatmap::Heatmap(
    mat = prof_scale,
    col = circlize::colorRamp2(c(-3, 0, 3), c("blue", "white", "red")),
    top_annotation = top_anno,
    cluster_columns = FALSE,
    cluster_rows = TRUE,
    show_row_names = FALSE,
    show_column_names = FALSE,
    column_split = phen$GroupCompvar,    
    heatmap_legend_param = list(
      legend_direction = "vertical", 
      legend_width = unit(6, "cm"),
      title = "Relative Abundance"))
  
  return(pl)
}

13.4 热图

  • 设置对应参数,运行get_heatmap

DEG_heat <- get_heatmap(
  object = ExprSet, 
  datsignif = da_res_signif,
  group = "Group",
  group_names = grp_names,
  group_colors = grp_colors)

DEG_heat

结果:热图展示了差异基因的表达状态

  • X轴是样本ID;

  • Y轴是基因ID;

13.5 输出结果

使用ggplotify::as.ggplot函数(Yu 2014)转换ComplexHeatmap::Heatmap函数(Gu, Eils, 和 Schlesner 2016)获得的热图。


if (!dir.exists("./data/result/Figure")) {
  dir.create("./data/result/Figure", recursive = TRUE)
}

ggsave("./data/result/Figure/Fig2-B.pdf", ggplotify::as.ggplot(DEG_heat), width = 12, height = 7, dpi = 600)

13.6 总结

在成功获得差异基因的分析结果后,进一步提取了这些差异基因在每个样本中的表达值。

系统信息
sessionInfo()
R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.2

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Shanghai
tzcode source: internal

attached base packages:
[1] grid      stats     graphics  grDevices datasets  utils     methods  
[8] base     

other attached packages:
 [1] ggplotify_0.1.2       circlize_0.4.16       ComplexHeatmap_2.18.0
 [4] Biobase_2.62.0        BiocGenerics_0.48.1   data.table_1.15.4    
 [7] lubridate_1.9.3       forcats_1.0.0         stringr_1.5.1        
[10] dplyr_1.1.4           purrr_1.0.2           readr_2.1.5          
[13] tidyr_1.3.1           tibble_3.2.1          ggplot2_3.5.1        
[16] tidyverse_2.0.0      

loaded via a namespace (and not attached):
 [1] gtable_0.3.5        shape_1.4.6.1       rjson_0.2.21       
 [4] xfun_0.43           htmlwidgets_1.6.4   GlobalOptions_0.1.2
 [7] tzdb_0.4.0          yulab.utils_0.1.4   vctrs_0.6.5        
[10] tools_4.3.3         generics_0.1.3      stats4_4.3.3       
[13] parallel_4.3.3      fansi_1.0.6         cluster_2.1.6      
[16] pkgconfig_2.0.3     RColorBrewer_1.1-3  S4Vectors_0.40.2   
[19] lifecycle_1.0.4     compiler_4.3.3      munsell_0.5.1      
[22] codetools_0.2-19    clue_0.3-65         htmltools_0.5.8.1  
[25] yaml_2.3.8          pillar_1.9.0        crayon_1.5.2       
[28] cachem_1.0.8        iterators_1.0.14    foreach_1.5.2      
[31] tidyselect_1.2.1    digest_0.6.35       stringi_1.8.4      
[34] fastmap_1.1.1       colorspace_2.1-0    cli_3.6.2          
[37] magrittr_2.0.3      utf8_1.2.4          withr_3.0.0        
[40] scales_1.3.0        timechange_0.3.0    rmarkdown_2.26     
[43] matrixStats_1.3.0   png_0.1-8           GetoptLong_1.0.5   
[46] hms_1.1.3           memoise_2.0.1       evaluate_0.23      
[49] knitr_1.46          IRanges_2.36.0      doParallel_1.0.17  
[52] gridGraphics_0.5-1  rlang_1.1.3         glue_1.7.0         
[55] BiocManager_1.30.23 renv_1.0.0          rstudioapi_0.16.0  
[58] jsonlite_1.8.8      R6_2.5.1            fs_1.6.4