【单细胞高级绘图】11.marker展示_分组气泡图

image

忙里偷闲,整理了一套绘图代码,代码300行,效果如上图所示:其实就是把单细胞转录组中常见的气泡图根据分组信息展开了,代码目前适用于分组后level数目为2/3/4这三种情况。

如果不分组,就是普通的气泡图,之前已经讲过几次了:

  • 单细胞分析实录(9): 展示marker基因的4种图形(二)
  • 单细胞转录组绘图视频教程

绘图完整流程如下

1. seurat标准流程
library(Seurat)
library(tidyverse)
library(xlsx)
library(harmony)

### 导入数据 ########################################
testanno=readRDS("testanno.rds")
testmat=readRDS("testmat.rds")

### 标准流程&质控 ###################################
testseu = CreateSeuratObject(counts = testmat)
testseu[["percent.mt"]] <- PercentageFeatureSet(testseu, pattern = "^mt-")
testseu@meta.data$sample=testseu@meta.data$orig.ident
VlnPlot(testseu,features = c("nCount_RNA", "nFeature_RNA", "percent.mt"),group.by = "sample",pt.size = 0)
testseu <- subset(testseu, subset = nCount_RNA < 40000 &
                    nFeature_RNA < 5000 & nFeature_RNA > 500 &
                    percent.mt < 10)

testseu <- NormalizeData(testseu, normalization.method = "LogNormalize", scale.factor = 10000)
testseu <- FindVariableFeatures(testseu, selection.method = "vst", nfeatures = 2000)
testseu <- ScaleData(testseu)
testseu <- RunPCA(testseu, npcs = 50, verbose = FALSE)

### harmony去批次 ###################################
testseu=testseu %>% RunHarmony("sample", plot_convergence = TRUE)

### 降维&聚类 #######################################
testseu <- testseu %>%
  RunUMAP(reduction = "harmony", dims = 1:20) %>%
  FindNeighbors(reduction = "harmony", dims = 1:20) %>%
  FindClusters(resolution = 0.5)

### 添加注释 ########################################
testseu@meta.data$CB=rownames(testseu@meta.data)
testseu@meta.data=testseu@meta.data%>%inner_join(testanno,by="CB")
rownames(testseu@meta.data)=testseu@meta.data$CB

DimPlot(testseu,reduction = "umap",group.by = "seurat_clusters",pt.size = 1,label = T,repel = T,label.size = 6)+
  DimPlot(testseu,reduction = "umap",group.by = "celltype",pt.size = 1,label = T,repel = T,label.size = 6)
rm(list = c("testanno", "testmat"))
2. 准备差异基因
### 找每一群细胞的marker基因 ###################################################
testseu@meta.data$celltype=factor(testseu@meta.data$celltype,
                                  levels = sort(unique(testseu@meta.data$celltype)))
Idents(testseu) = "celltype"
markerdf=FindAllMarkers(testseu,logfc.threshold = 0.8,only.pos = T)
markerdf=markerdf %>% group_by(cluster) %>% top_n(100,wt = avg_log2FC)
markerdf=as.data.frame(markerdf)
markerdf=markerdf%>%arrange(cluster,desc(avg_log2FC))
write.csv(markerdf,file = "celltype_marker_log2fc0.8_top100.csv",quote = F,row.names = F)
# 之后从这个表格中挑出想画图的基因,另存为plotgene.xlsx
plotgene=read.xlsx("plotgene.xlsx",sheetIndex = 1,header = T)

### 接下来为了得到最终图的效果,人为构建分组信息 ###############################
# 实际分析中,分组信息是不能人为随意构建的,而是课题样本内在具有的信息。
# 比如,本示例数据有7个样本: Arep1 Arep2 Arep3 Brep1 Brep2 Brep3 Brep4
# 显然可以分为两组: Arep和Brep

# 这里人为设定了3种分组,分别包含2/3/4个水平,以此来测试代码的适用性,这三种
# 应该涵盖了绝大多数用户的需求。
testseu@meta.data$group1=sample(c("groupA","groupB"),dim(testseu@meta.data)[1],replace = T)
testseu@meta.data$group2=sample(c("groupA","groupB","groupC"),dim(testseu@meta.data)[1],replace = T)
testseu@meta.data$group3=sample(c("groupA","groupB","groupC","groupD"),dim(testseu@meta.data)[1],replace = T)
testseu@meta.data$group3[testseu@meta.data$group3 == "groupD" & 
                           testseu@meta.data$celltype == "cell_B"] = "groupC"
3. 绘制分组气泡图
# 必要的输入:
# seurat对象,meta数据框中有表示细胞类型的列和表示分组的列;
# 提供细胞类型的顺序;
# 表示marker基因的数据框,至少有两列,一列为cluster,一列为gene,基因名无重复。
source("bubble_split.R")
bubble_split(seu.obj = testseu,celltype.column = "celltype",
             celltype.order = levels(Idents(testseu)),
             group.column = "group1",deg = plotgene,
             rect_color = "red",rect_size = 1)
ggsave("bubble_分两组.pdf",width = 40,height = 7,units = "cm")

bubble_split(seu.obj = testseu,celltype.column = "celltype",
             celltype.order = levels(Idents(testseu)),
             group.column = "group3",deg = plotgene,
             rect_color = "black",rect_size = 0.5)
ggsave("bubble_分四组.pdf",width = 40,height = 11,units = "cm")

获取代码

淘,
宝店-
TOP生物信息

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容