ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

热图联动点图展示Marker基因 #5643

Closed ixxmu closed 1 month ago

ixxmu commented 1 month ago

https://mp.weixin.qq.com/s/gkRsxPvJhAOu3GSo8h-xwg

ixxmu commented 1 month ago

热图联动点图展示Marker基因 by 单细胞天地

前情提要

最近在#单细胞常见图表会整理五种方法可视化Marker基因系列

目前已经整理前两种——Doheatmap以及Dotplot可视化Marker基因及美化

在整理完Dotplot可视化细节之如何计算百分比和表达量平均值提到了文章中会使用Dotplot的结果,用热图的形式进行展示**

文章是单细胞文献复现月更交流群(门票99哦)里面复现的第一篇,胃癌的文章。

那这期一起来学习尝试复现一下,文章使用的里面展示Marker基因的方式。

获取绘图数据

获取需要展示的Marker基因集

这里使用Pbmc-3K的数据进行尝试,首先还是注释后的数据集,使用FindAllMarker计算每个亚群的Marker基因,并获取Top5的Marker基因用于后续的展示

#计算所有簇的Marker基因,并且可视化TOP5基因
# only.pos = TRUE,只关注上调;min.pct = 0.25,一个基因至少要在25%的细胞中表达

pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25,  logfc.threshold = 0.25, verbose = FALSE)
top5 = pbmc.markers %>% group_by(cluster) %>% top_n(n = 5, wt = avg_log2FC)
g = unique(top5$gene)

Dotplot结果数据获取

使用Dotplot绘图时候,可以将其保存给一个变量p,这时候直接输出p就是点图,使用View(p)查看就可以看到绘图的数据和变量

p <- DotPlot(pbmc, features = g)

View(p)

我们需要的数据就保存在data里面,提取出来用于绘图即可

整理数据并绘图

1. 首先将data数据提取出来保存为新的变量,然后整理为热图需要的格式

#提取数据
# 加载必要的包
library(tidyr)
library(dplyr)
library(pheatmap)

# 将数据存储在 dotplot_data 中
dotplot_data <- p$data
class(dotplot_data)
# 将数据转换为宽格式,以 `avg.exp.scaled` 为数值
heatmap_data <- dotplot_data %>%
  select(features.plot, id, avg.exp.scaled) %>%
  pivot_wider(names_from = features.plot, values_from = avg.exp.scaled)

# 将细胞分群ID列设置为行名
heatmap_data = column_to_rownames(heatmap_data,var = "id")

2. 使用pheatmap绘图

pheatmap(heatmap_data, 
         cluster_rows = F, 
         cluster_cols = F)

3. 调整颜色添加注释信息

虽然没有直接复现文献的结果图,但是会可以根据它的配色来调整热图的颜色

pheatmap(heatmap_data, 
         cluster_rows = F, 
         cluster_cols = F, 
         color = colorRampPalette(c("#c3ddf0""#eaf2f9""#e85a40"))(100))

添加细胞注释条例图

# 添加注释
annotation <- data.frame(CellType = row.names(heatmap_data))
row.names(annotation) <- row.names(heatmap_data)

pheatmap(heatmap_data, 
         cluster_rows = F, 
         cluster_cols = F, 
         color = colorRampPalette(c("#c3ddf0""#eaf2f9""#e85a40"))(100),
         annotation_row = annotation)

调整一下热图格子的大小

pheatmap(heatmap_data,
         cellwidth = 10,
         cellheight = 15,
         cluster_rows = F, 
         cluster_cols = F,
         color = colorRampPalette(c("#c3ddf0""#eaf2f9""#e85a40"))(100))

调整之后看起来和文章的结果差不太多,那就暂时先调整到这里叭。大家如果感兴趣也可以自己调整试试看!

结尾小结

这次使用热图基于Dotplot结果展示marker基因的代码,使用ChatGPT辅助进行整理。

作为一个还在努力学习掌握R语言的小菜鸟,真的太爱能给出正确代码的chatGPT啦!

曾老师工作日会在生信技能树视频号给大家演示使用kimi进行答疑,大家可以参与直播互动呀!

不管是Kimi还是chatGPT,用好了都可以帮助提升工作效率,所以要好好借助这些工具呀!

chatGPT的话还是推荐国内可稳定使用的GPT-4,还自带联网功能

文末友情宣传

如果你也想做单细胞转录组数据分析,最好是有自己的计算机资源哦,比如我们的2024的共享服务器交个朋友福利价仍然是800,而且还需要有基本的生物信息学基础,也可以看看我们的生物信息学马拉松授课,你的生物信息学入门课。