• 复现PNAS图表:数据整理+聚类离散热图


    今天复现一幅PNAS文章中的图,是个热图,重点不是这个热图,而是得到做热图的数据(数据代码已上传qq群)。原文及图片如下:

    (reference:Convergent molecular, cellular, and cortical neuroimaging signatures of major depressive disorder)

    构建数据

    其实得到数据才是这一篇文章的重点内容,从原始的GO、KEGG分析结果csv文件中,我们挑选需要的通路,还有基因,构建做这个离散热图的文件。这里涉及到一个批量读入文件的操作,其实我们只有三个文件,这样做实属操作过度,不过这里只是一个例子,当你面对几十个文件要读入的时候,想起来这篇文章,获取有用!

    1. setwd("D:/KS项目/公众号文章/复现PNAS")
    2. #批量读入csv文件,这只是一种方法
    3. library(dplyr)
    4. data <-list.files(path = "D:/KS项目/公众号文章/复现PNAS",
    5. pattern = "*.csv",
    6. full.names = T)
    7. data <- data%>%lapply(read.csv)
    8. Enrich <- data[[1]]
    9. gene_sel <- data[[2]]
    10. pathway_sel <- data[[3]]
    11. #挑选pathway,原图作者提供了20条,我可能输入有误吧,只有16,无所谓能做图即可
    12. Enrich_sel <- Enrich[Enrich$Name %in% pathway_sel$pathway, ]

    接下来就是鉴定我们选定的基因是否存在于通路基因中,通过循环构建数据。这样的数据是TRUE和FALSE的一个矩阵。由于后期无法聚类,所以将其转化为0,1矩阵。

    1. #构建数据,就是看我们选择的基因是否存在于选定通路
    2. enrich_pathway <- Enrich_sel$Name
    3. Enrich_df <- gene_sel
    4. for (i in 1:length(enrich_pathway)){
    5. a <- Enrich_sel[i,]$Hit.in.Query.List
    6. a <- as.character(unlist(strsplit(a, split = ",")))
    7. b <- gene_sel$gene_sel %in% a
    8. b <- as.data.frame(b)
    9. colnames(b) <- enrich_pathway[i]
    10. Enrich_df <- cbind(Enrich_df, b)
    11. }
    12. #构建矩阵
    13. rownames(Enrich_df) <-Enrich_df[,1]
    14. Enrich_df <- Enrich_df[,-1]
    15. head(Enrich_df)
    16. #浅尝一下,作个热图,做热图
    17. Enrich_df[Enrich_df == "TRUE"] = 1
    18. Enrich_df[Enrich_df == "FALSE"] = 0

    Complexheatmap作图

    1. library(ComplexHeatmap)
    2. Heatmap(t(as.matrix(Enrich_df)),
    3. cluster_rows = T,
    4. cluster_columns = F,
    5. show_column_names = T,
    6. show_row_names = T,
    7. row_names_side = 'left',
    8. column_title = NULL,
    9. heatmap_legend_param = list(
    10. title=' ',
    11. labels=c('Present','Absent'),
    12. labels_gp = gpar(fontsize = 10),
    13. border='black'),
    14. col = c('#F2F2F0','#5A8FCA'),
    15. rect_gp = gpar(col = "grey", lwd = 1),
    16. row_names_gp = gpar(fontsize = 10),
    17. column_names_gp = gpar(fontsize = 10))

    图片

    我们看到有个缺点就是聚类和行名无法用不同颜色表示,我感觉Heatmap应该是无法直接实现了。后期还发现一个从没用过的做热图函数,还挺有意思的,它就可以实现聚类标注不同颜色,功能挺强大,缺点是参数名称太不友好,不像heatmap让人一看名字就知道是干嘛的,如下。

    heatmaply作图

    1. install.packages("heatmaply")
    2. library(heatmaply)
    3. heatmaply(t(as.matrix(Enrich_df)),
    4. k_row=3,
    5. colors=c('#F2F2F0','#5A8FCA'),
    6. show_dendrogram=c(TRUE,FALSE),
    7. column_text_angle=90,
    8. row_dend_left=F,
    9. grid_color ='grey',
    10. hide_colorbar =T,
    11. branches_lwd =0.5)

    图片

    具体参数感兴趣可自行研究。其实还没有达到完全复现,ggplot是可以很轻松实现的,但这不是我的目的,不弄了。我想很多人和我一样,并不是专业计算机出身的人,所以不要追求代码写的漂亮,只要达到目的就可以。而且,写的过程中要自己思考,代码不是冷冰冰的,那都是逻辑啊!有错误了也是需要有逻辑的去思考去寻找,而不是什么也不看!

    觉得分享对你有用的,点个赞、分享一下呗!更多精彩请至我的公众号《KS科研分享与服务》!

  • 相关阅读:
    【多区域电力系统模型】三区域电力系统的LQR和模糊逻辑控制(Matlab代码实现)
    matlab中矩阵点乘和乘的区别(超级简单)
    java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy
    【二叉树】链式结构的一些操作实现
    新手学习:ArcGIS 提取SHP 路网数据、节点
    第一届电子纸产业创新应用论坛
    Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析
    WPF提供了哪些不同类型的画刷
    日常开发小汇总(3)js类型判断
    神经网络图像输入零均值化的作用(AlexNet)
  • 原文地址:https://blog.csdn.net/qq_42090739/article/details/127959106