实用型绘图技巧分享——如何让热图的列聚类按照自己的想的顺序展示呢

文摘   2024-12-12 09:43   北京  

不设置🌟有时会收不到公众号内容,code一段时间后会失效,代码在文末

很多小伙伴反应不会绘图,其实我之前分享的那些源代码绘图都挺好的,但确实需要一些门槛,猛的一看会有一些看不懂,后面准备开一个绘图的专题,把一些有用的,好看的绘图代码分享出来,包含示例数据,让大家从读取到出图一步到位。(如下)

在做单细胞测序的Ro/e分析(主要还是看细胞类型丰度差异的,昨天介绍了另外一种方法又看到这个单细胞差异丰度分析用在顶刊上了,可以试下),虽然纵坐标的聚类结果符合我的预期,但还是有一些不完美,我想要让他们按照我的等级顺序进行展示,如下图(右边的👉)

怎么实现呢,👀下面的代码


library(pheatmap)library(ggplot2)roe <- readRDS("./roe.rds")# 1. 计算行间距(欧氏距离)row_distance = dist(roe, method = "euclidean")
# 2. 进行行聚类row_clustering = hclust(row_distance)
# 3. 自定义的列顺序(手动设定顺序)custom_col_order =c('Grade1','Grade2','Grade3','Grade4')  # 替换成你自己的列名
# 4. 转置数据表,用于列聚类roe_transposed = as.data.frame(t(roe))
# 5. 计算列间距(欧氏距离)col_distance = dist(roe_transposed)
# 6. 进行列聚类col_clustering = hclust(col_distance)
# 7. 使用自定义的列顺序调整列的显示顺序dendrogram = reorder(as.dendrogram(col_clustering), wts = order(match(custom_col_order, rownames(roe_transposed))))
# 8. 转换为层次聚类对象custom_col_cluster = as.hclust(dendrogram)
# 9. 绘制热图,使用自定义列聚类顺序p = pheatmap(roe, display_numbers = TRUE, # 显示单元格中的数值 number_color = "black", # 设置数值的字体颜色为黑色 border_color = "white", # 设置单元格边框的颜色为白色 treeheight_row = 15, # 设置行聚类树的高度(默认为50,设置为15使得树状图更紧凑) treeheight_col = 15, # 设置列聚类树的高度(默认为50,设置为15使得树状图更紧凑) cluster_row = TRUE, # 对行进行聚类,设置为TRUE启用行聚类 cellwidth = 25, # 设置单元格的宽度(默认为30,调整为25使得图形更紧凑) cellheight = 25, # 设置单元格的高度(默认为30,调整为25使得图形更紧凑) cluster_cols = col_cluster, # 设置列的聚类结构,使用事先定义的col_cluster变量 # cluster_col = TRUE, # 这行参数是注释掉的,因其与cluster_cols冲突。可以使用cluster_cols代替 color = colorRampPalette(c('#EEEEEE', 'lightblue', 'darkblue'))(50) # 设置热图的颜色渐变范围)
pggsave("./Roe.pdf",p,width = 4,height = 7)


有些文章,一会用+号替代,比如像下面这样

下面是我画的,加上下面这个代码就行,可以与上面无缝衔接,也换个了配色,哪个好看就用哪个

#install.packages('RColorBrewer')library(RColorBrewer)# 自定义颜色渐变color_palette <- colorRampPalette(c("#f8e7d3", "#fcaf72", "#cd782d", "firebrick3"))(3)  # 使用 `colorRampPalette` 定义一个从浅色 (#f8e7d3) 到红色调 (#fcaf72, #cd782d, firebrick3) 的颜色渐变# 参数 `3` 表示将此颜色渐变分为 3 个不同的颜色级别
# 初始化符号矩阵roe_symbols <- matrix("±", nrow = nrow(roe), ncol = ncol(roe)) # 设置所有单元格的符号为 "±"roe_symbols[roe > 1 & roe <= 1.5] <- "+" # 对应条件:roe > 1 且 roe <= 1.5 时,设置为 "+"roe_symbols[roe > 1.5 & roe <= 3] <- "++" # 对应条件:roe > 1.5 且 roe <= 3 时,设置为 "++"roe_symbols[roe > 3] <- "+++" # 对应条件:roe > 3 时,设置为 "+++"
# 绘制热图,并显示自定义的数字或符号p = pheatmap(roe, display_numbers = roe_symbols, # 使用自定义符号显示数字。roe_symbols 为我们设置的符号矩阵 number_color = "black", # 显示数字/符号的颜色为黑色 border_color = "#f8e7d3", # 单元格的边框颜色 treeheight_row = 20, # 行聚类树的高度设置为 20(使其更紧凑) cellwidth = 25, # 设置单元格宽度为 25(根据需要调整) cellheight = 25, # 设置单元格高度为 25(根据需要调整) cluster_row = TRUE, # 对行进行聚类 cluster_cols = col_cluster, # 使用事先定义的列聚类结构 color = color_palette, # 使用自定义的颜色渐变(前面定义的 color_palette) legend_breaks = c(0, 1, 1.5, 3, 4), # 定义色阶的断点:0, 1, 1.5, 3, 4(颜色渐变对应的值) legend_labels = c("0", "1", "1.5", "3", "4"),# 图例标签,显示这些值对应的符号或数值 fontsize_number = 10) # 增大符号的字体大小(默认值为 10)p# 将热图保存为 PDF 文件,文件名为 "roe_new.pdf"ggsave("./Roe.pdf",p,width = 4,height = 7)

今天主要讲的是绘图,这个都是通用的,换成其他数据,也是直接用的,也不需要改啥参数

没有服务器,单细胞数据搞不定?我们目前做好了这些pipeline,可以帮你做

  • 后苔↩️之前贴子的岸号即可霍得代码和示例数据,有效期 7 天,今日关键词:241212

最近又搞定了一个 compass单细胞代谢分析,这个计算时间非常长,这个模块的分析,也已经加入到我们的单细胞分析项目中了。我们的单细胞分析项目还在持续更新中

这次生信的大纲内容进行全面的调整,想了解生信的,跟班的,可以看下面👇这个文章

这次可不是只学单细胞,基本上从基础到多组学、空间、机器学习一条龙全打通了

单细胞数据分析需求的可以看👇这个文章

没有服务器,单细胞数据搞不定?我们目前做好了这些pipeline,可以帮你做(近期又添加了21 年发表在了 Cell上面的单细胞转录组分析代谢的分析——compass)

生信钱同学
北京大学在读博士生,记录自己的学习日常🌞分享生信知识:如单细胞和空间测序、多组学分析、宏基因组、病理组学、影像组学等生物信息学、机器学习和深度学习内容🌬
 最新文章