美文网首页
【R画图学习24.3】ComplexHeatmap例子1

【R画图学习24.3】ComplexHeatmap例子1

作者: jjjscuedu | 来源:发表于2023-02-11 14:54 被阅读0次

    我们从今天开始,学习应用complexheatmap的基本知识画一些好看的例子。数据和例子信息参考官方链接:

    https://jokergoo.github.io/ComplexHeatmap-reference/book/more-examples.html#more-examples

    我们先分解一下这个图的基本结构:最中间是个基因的表达值矩阵,并且做了scale。最上面的是一个关于列的注释。最左边是关于行的分类的块注释,可以看出分成了5类。最右边含有三个三个注释:base mean就是每行的平均值,平均值上面还有一个连续性变量的boxplot。length是长度信息的一个散点图。最右边是基因的类型信息。

    所以我们先一步步实现。

    先准备输入数据,用到自带的基因表达值数据。

    library(ComplexHeatmap)

    library(circlize)

    expr = readRDS(system.file(package = "ComplexHeatmap", "extdata", "gene_expression.rds"))

    mat = as.matrix(expr[, grep("cell", colnames(expr))])

    mat_scaled = t(apply(mat, 1, scale))   #标准化

    先画最基础的表达值矩阵:

    Heatmap(mat_scaled, name = "expression", row_km = 5,

        col = colorRamp2(c(-2, 0, 2), c("green", "white", "red")),

        show_column_names = FALSE,

        row_title = NULL,

        show_row_dend = FALSE,

        show_row_names = FALSE

    )

    然后添加最上面的type,可以明显看出是按样品来源分成了三类。然后左边是个块注释。

    所以我们把type信息准备成一个列注释来实现。

    type = gsub("s\\d+_", "", colnames(mat))

    ha = HeatmapAnnotation(pe= type, annotation_name_side = "left")

    hf = rowAnnotation(foo = anno_block(gp = gpar(fill = 2:6)))   #左边的块注释

    Heatmap(mat_scaled, name = "expression", row_km = 5,

        col = colorRamp2(c(-2, 0, 2), c("green", "white", "red")),

        show_column_names = FALSE,

        row_title = NULL,

        show_row_dend = FALSE,

        show_row_names = FALSE,

        top_annotation = ha,

        left_annotation=hf

    )

    注:颜色,我自己就没设置那么一致了,颜色可以自己修改。

    下面添加右侧第一个平均值的一个单独heatmap以及上面的bar图。

    base_mean = rowMeans(mat)   #计算每行的平均值

    base_ha = HeatmapAnnotation(summary = anno_summary(gp = gpar(fill = 2:6),height = unit(2, "cm")))   #用我们上个帖子学的,有一个特殊的注释anno_summary()只适用于一列热图或一行热图

    Heatmap(mat_scaled, name = "expression", row_km = 5,

        col = colorRamp2(c(-2, 0, 2), c("green", "white", "red")),

        show_column_names = FALSE,

        row_title = NULL,

        show_row_dend = FALSE,

        show_row_names = FALSE,

        top_annotation = ha,

        left_annotation=hf

    )+

    Heatmap(base_mean, name = "base mean", top_annotation =base_ha,

            width = unit(10, "mm"),show_row_names = FALSE)

    第二张图是基因长度的点图,就是每一行量的长度信息。前面我们讲过,点注释通过anno_points()来实现。

    Heatmap(mat_scaled, name = "expression", row_km = 5,

        col = colorRamp2(c(-2, 0, 2), c("green", "white", "red")),

        show_column_names = FALSE,

        row_title = NULL,

        show_row_dend = FALSE,

        show_row_names = FALSE,

        top_annotation = ha,

        left_annotation=hf

    )+

    Heatmap(base_mean, name = "base mean", top_annotation =base_ha,

            width = unit(10, "mm"),show_row_names = FALSE)+

    rowAnnotation(length = anno_points(expr$length,size = unit(1, "mm"),pch=16,

                  axis_param = list(at = c(0, 2e5, 4e5, 6e5), labels = c("0kb", "200kb", "400kb", "600kb")),

                  width = unit(20, "mm")

    ))

    右边最后一个是离散型的变量,关于gene type的显示信息。还是要用到anno_summary(),只不过和base mean不同的是,那个是连续型变量,所以是boxplot,这个是离散型,所以会是堆集柱状图。

    gene_ha = HeatmapAnnotation(summary = anno_summary(gp = gpar(fill = c("cyan","pink","green","gold")),height = unit(2, "cm")))

    Heatmap(mat_scaled, name = "expression", row_km = 5,

        col = colorRamp2(c(-2, 0, 2), c("green", "white", "red")),

        show_column_names = FALSE,

        row_title = NULL,

        show_row_dend = FALSE,

        show_row_names = FALSE,

        top_annotation = ha,

        left_annotation=hf

    )+

    Heatmap(base_mean, name = "base mean", top_annotation =base_ha,

            width = unit(10, "mm"),show_row_names = FALSE)+

    rowAnnotation(length = anno_points(expr$length,size = unit(1, "mm"),pch=16,

                  axis_param = list(at = c(0, 2e5, 4e5, 6e5), labels = c("0kb", "200kb", "400kb", "600kb")),

                  width = unit(20, "mm")

    ))+

    Heatmap(expr$type, name = "gene type", top_annotation =gene_ha,

            width = unit(10, "mm"),show_row_names = FALSE)

    这样子,我们就差不多画好刚才例子中的图了。

    相关文章

      网友评论

          本文标题:【R画图学习24.3】ComplexHeatmap例子1

          本文链接:https://www.haomeiwen.com/subject/cailkdtx.html