##该代码包含Seurat官方数据的分析流程，细胞定义，各种图形展示和细胞通讯文件生成等。可参考https://satijalab.org/seurat/articles/pbmc3k_tutorial.html

#install.packages("Seurat")#默认安装最新版本5.1.0，但空间可视化效果不好
#remove.packages("Seurat")#卸载最新版
#安装指定版本
#install.packages("devtools")
#devtools::install_version("Seurat", version=package_version('5.0.3'))
#install.packages("data.table")
##载入Seurat包
library(dplyr)
library(Seurat)
library(patchwork)
library(ggplot2)
library(cowplot)
library(clustree)
library(data.table)
##读入pbmc数据#文件名字
pbmc.data <- Read10X(data.dir = "C:/Users/28527/Desktop/scRNA/ziliao/scRNA-code/test/")##注意修改自己数据路径

##查看稀疏矩阵的维度,即基因数和细胞数
dim(pbmc.data)
pbmc.data[1:10,1:6] #主要为了查看数据，可以自己调整行列数
#pbmc.data[c("CD3D", "TCL1A", "MS4A1"), 1:30]

##创建Seurat对象与数据过滤
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
pbmc
##计算每个细胞的线粒体基因转录本数的百分比（%）,使用[[ ]] 操作符存放到metadata中
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-") #如果gene文件中线粒体基因是大写MT小写mt，修改成大写MT小写mt
#pbmc[["percent.rp"]]  = PercentageFeatureSet(pbmc, pattern = "^RP[SL][[:digit:]]") ##计算源自核糖体蛋白的基因表达比例

#红细胞占比 
#HB.genes_total <- c("HBA1","HBA2","HBB","HBD","HBE1","HBG1","HBG2","HBM","HBQ1","HBZ") #人类血液常见红细胞基因
#HB_m <- match(HB.genes_total,rownames(pbmc@assays$RNA))
#HB.genes <- rownames(pbmc@assays$RNA)[HB_m]
#HB.genes <- HB.genes[!is.na(HB.genes)]
#pbmc[["percent.HB"]]<-PercentageFeatureSet(pbmc,features=HB.genes)

##展示基因及线粒体百分比
VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2

##过滤细胞：保留gene数大于200小于2500的细胞；目的是去掉空GEMs和1个GEMs包含2个以上细胞的数据；而保留线粒体基因的转录本数低于5%的细胞,为了过滤掉死细胞等低质量的细胞数据
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 8000 & percent.mt < 15) ###important step1: 要根据自己数据分布调整nFeature_RNA和percent.mt上限。

##表达量数据标准化,LogNormalize的算法：A = log( 1 + ( UMIA ÷ UMITotal ) × 10000 )
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)
#pbmc <- NormalizeData(pbmc) 或者用默认的,和上一条命令效果一致

##鉴定表达高变基因(2000个）,用于下游分析,如PCA；
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000) ###important step2: nfeatures默认2000，可以往上往下调整 

##提取表达量变变化最高的10个基因；
top100 <- head(VariableFeatures(pbmc), 100)
top100

#plot1 <- VariableFeaturePlot(pbmc)
#plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)
#plot1 + plot2

#使用ScaleData进行数据归一化
##对所有基因进行归一化的方法如下：
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)

##为了加快速度，用默认参数，选取标准化高变基因（2000个）,速度更快。
#pbmc <- ScaleData(pbmc)
 
##如果要消线粒体的效应，通过vars.to.regress来实现,也可以消除细胞周期"G2M.Score","S.Score"
#pbmc <- ScaleData(pbmc, vars.to.regress = "percent.mt")

##线性降维（PCA）,默认用高变基因集,但也可通过features参数自己指定；
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))
 
##检查PCA分群结果, 这里只展示前5个PC,每个PC只显示5个基因；
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)

##展示主成分基因分值
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")

##绘制pca散点图
DimPlot(pbmc, reduction = "pca")+ NoLegend()

##画第1个或15个主成分的热图；
DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE)
DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)

##确定数据集的主成分选择个数 
#方法1：Jackstraw置换检验算法；重复取样（原数据的1%）,重跑PCA,鉴定p-value较小的PC；计算‘null distribution’(即零假设成立时)时的基因scores。该过程很耗时间。
#pbmc <- JackStraw(pbmc, num.replicate = 100)
#pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
#JackStrawPlot(pbmc, dims = 1:15)

#方法2：肘部图（碎石图）,基于每个主成分对方差解释率的排名。
ElbowPlot(pbmc)

##主成分个数这里选择10,建议尝试选择多个主成分个数做下游分析,对整体影响不大；在选择此参数时,建议选择偏高的数字（为了获取更多的稀有分群,“宁滥勿缺”）；有些亚群很罕见,如果没有先验知识,很难将这种大小的数据集与背景噪声区分开来。

##细胞聚类
##基于PCA空间中的欧氏距离构建KNN图，并基于任意两个细胞在其局部邻域的共享重叠(Jaccard相似性)来优化距离权重（输入上一步得到的PC维数）。
pbmc <- FindNeighbors(pbmc, dims = 1:14) ###important step3: 10代表的就是选择的主成分个数，需要根据自己数据调整
##
##接着应用模块化优化技术进行聚类,resolution参数决定下游聚类分析得到的分群数,对于3K左右的细胞,设为0.4-1.2 能得到较好的结果(官方说明)；如果数据量增大,该参数也应该适当增大。
pbmc <- FindClusters(pbmc, resolution = 0.4) ###important step4: 分辨率0.5可以往上下调整，以增加或减少分群的cluster数

##使用Idents（）函数可查看不同细胞的分群；
head(Idents(pbmc), 5)

##Seurat提供了几种非线性降维的方法进行数据可视化（在低维空间把相似的细胞聚在一起）,比如UMAP和t-SNE。维度选取建议和聚类时的FindNeighbors一致。
pbmc <- RunUMAP(pbmc, dims = 1:14)##important step3: 10代表的就是选择的主成分个数，需要根据自己数据调整

##用DimPlot()函数绘制散点图,reduction = "umap",指定绘制类型；如果不指定,默认先从搜索 umap,然后 tsne, 再然后 pca；也可以直接使用这3个函数PCAPlot()、TSNEPlot()、UMAPPlot()； cols,pt.size分别调整分组颜色和点的大小；
DimPlot(pbmc, reduction = "umap")

##如需要计算TSNE
#pbmc <- RunTSNE(pbmc, dims = 1:12)##important step3: 10代表的就是选择的主成分个数，需要根据自己数据调整
#DimPlot(pbmc,reduction = "tsne",label = TRUE,pt.size = 1.5)

##细胞周期归类
pbmc<- CellCycleScoring(object = pbmc, g2m.features = cc.genes$g2m.genes, s.features = cc.genes$s.genes)
head(x = pbmc@meta.data)
DimPlot(pbmc,reduction = "umap",label = TRUE,group.by="Phase",pt.size = 1.5)

###查看并存储UMI，标准化及归一化的数据
write.table(pbmc[["RNA"]]$count,"D:/umi.xls",sep="\t",quote=F)#原始UMI
write.table(pbmc[["RNA"]]$data,"D:/data.xls",sep="\t",quote=F)#标准化的data，进行了LogNormalize
write.table(pbmc[["RNA"]]$scale.data),"D:/scale.data.xls",sep="\t",quote=F)#归一化的scale.data,有正负

###同时可通过pbmc[["pca"]]，pbmc[["umap"]]，pbmc[["tsne"]] 再加上@目的参数读取pca，umap，tsne相关的信息

##存储结果#优先调PCA，其次高变基因，最次分辨率
saveRDS(pbmc, file = "G:/danxibao/ziliao/scRNA-code/test/pbmc_tutorial.rds")
save(pbmc,file="G:/danxibao/ziliao/scRNA-code/test/res0.5.Robj")##很重要，下一步轨迹分析需要用到 

#############此处为过滤双细胞，感兴趣的可以学习
##如需使用DoubletFinder进行双细胞过滤
##安装软件
install.packages("devtools")
devtools::install_github('chris-mcginnis-ucsf/DoubletFinder')
##运行
library(DoubletFinder)
### 找最佳PK.定义用于计算 pANN 的 PC 邻域大小，表示为合并的真实 real-artificial 数据的一部分，对于每个 scRNA-seq 数据集都需要调整 pK
sweep.res.list_pbmc <- paramSweep(pbmc, PCs = 1:10, sct = FALSE)#PCs可修改
sweep.stats_pbmc <- summarizeSweep(sweep.res.list_pbmc, GT = FALSE)
bcmvn_pbmc <- find.pK(sweep.stats_pbmc)#可以看到最佳参数的点
opt_pK <- as.numeric(as.character(bcmvn_pbmc$pK[which.max(bcmvn_pbmc$BCmetric)]))
print(opt_pK)
# [1] 0.02
# 找最佳 nExp. nExp定义了用于进行最终 doublet/singlet 预测的pANN阈值，可以从10X/Drop-Seq 装置中的细胞装载密度来最好地估计该值，并根据 homotypic doublets 对估计比例进行调整。
DoubletRate = 0.076                     # 直接查表，10000细胞对应的doublets rate是~7.6%，我们这次选这个
#DoubletRate = ncol(pbmc)*8*1e-6 #或者按每增加1000个细胞，双细胞比率增加千分之8来计算
homotypic.prop <- modelHomotypic(pbmc@meta.data$seurat_clusters) #估计同源双细胞比例          
nExp_poi <- round(DoubletRate*nrow(pbmc@meta.data))  # 计算双细胞比例
nExp_poi.adj <- round(nExp_poi*(1-homotypic.prop))   # 使用同源双细胞比例对计算的双细胞比例进行校正 
##使用确定好的参数鉴定doublets
pbmc <- doubletFinder(pbmc,PCs = 1:10,pN = 0.25,pK = opt_pK,nExp = nExp_poi.adj,reuse.pANN = FALSE,sct = FALSE)
DimPlot(pbmc, reduction = "umap", group.by = "DF.classifications_0.25_0.26_361")#记得改文件名/meta.data
table(pbmc$DF.classifications_0.25_0.26_361) ##查看双细胞及单细胞数量
pbmc1<-subset(pbmc, subset = DF.classifications_0.25_0.26_361=="Singlet")#剔除双细胞
#############此处为过滤双细胞，感兴趣的可以学习

##寻找cluster 2的marker，ident.1，选定cluster
cluster2.markers <- FindMarkers(pbmc, ident.1 = 2)
head(cluster2.markers, n = 5)

# 寻找cluster 5相对于cluster 0和3的marker
cluster5.markers <- FindMarkers(pbmc, ident.1 = 5, ident.2 = c(0, 3))
head(cluster5.markers, n = 5)

##寻找每一cluster的marker
pbmc.markers <- FindAllMarkers(pbmc1, only.pos = TRUE)#TRUE为上调，FALSE为上下调
pbmc.markers %>% group_by(cluster) %>% dplyr::filter(avg_log2FC > 1)

##调整差异分析的统计学检验方法
#cluster0.markers <- FindMarkers(pbmc, ident.1 = 0, logfc.threshold = 0.25, test.use = "roc", only.pos = TRUE)

##存储marker
write.table(pbmc.markers,file="C:/Users/28527/Desktop/scresult/allmarker.txt",sep="\t")


##########################多组火山图################################
install.packages('devtools')
devtools::install_github('junjunlab/scRNAtoolVis')

library(scRNAtoolVis)
# find markers
# 差异分析：每个 cluster vs 其他（包含上下调基因）
# find markers
pbmc.markers <- FindAllMarkers(pbmc1, only.pos = FALSE,
                               min.pct = 0.25,
                               logfc.threshold = 0)


# 使用 HumanPrimaryCellAtlasData（人类）或 MouseRNAseqData（小鼠）
library(SingleR) #加载SingleR
library(celldex) #加载celldex
refdata <- celldex::HumanPrimaryCellAtlasData()
pbmc_for_SingleR <- GetAssayData(pbmc1, assay = "RNA", layer = "counts")

# SingleR 注释/可以换手动注释
cellpred <- SingleR(
  test = pbmc_for_SingleR,
  ref = refdata,
  labels = refdata$label.fine,
  clusters = pbmc1@active.ident
)

# 提取注释信息
celltype <- data.frame(
  Cluster = rownames(cellpred),
  CellType = cellpred$labels,
  stringsAsFactors = FALSE
)

# 合并注释并替换 cluster 列
pbmc.markers <- pbmc.markers %>%
  # 将 cluster 列转换为字符型以匹配 celltype$Cluster
  mutate(cluster = as.character(cluster)) %>%
  # 合并注释
  left_join(celltype, by = c("cluster" = "Cluster")) %>%
  # 用 CellType 覆盖 cluster 列
  mutate(cluster = CellType) %>%
  # 移除冗余的 CellType 列
  select(-CellType) %>%
  # 按目标列顺序排列
  select(p_val, avg_log2FC, pct.1, pct.2, p_val_adj, cluster, gene)

# 检查输出
head(pbmc.markers)

# plot
jjVolcano(diffData = pbmc.markers,tile.col = jjAnno::useMyCol("paired", n = 12))

# 调整log2FC阈值,颜色映射类型和top基因数量:
jjVolcano(diffData = pbmc.markers,
          log2FC.cutoff = 0.5,
          col.type = "adjustP",
          topGeneN = 20,
          aesCol = c('purple','orange'))
#提供基因名,标记自己的基因:
mygene <- c('Ccl1','Ccl2','Ccl3','Ccl4','Ccl5','Ccl7','Ccl8','Ccl11','Ccl13',
            'Ccl14','Ccl15','Ccl16','Ccl17','Ccl18','Ccl19','Ccl20','Ccl21',
            'Ccl22','Ccl23','Ccl24','Ccl25','Ccl26','Ccl27','Ccl28',#CC 趋化因子亚家族配体 (CCL)
            'Ccr1','Ccr2','Ccr3','Ccr4','Ccr5','Ccr6','Ccr7','Ccr8','Ccr9','Ccr10',#CC 趋化因子亚家族受体 (CCR)
            'Cxcl1','Cxcl2','Cxcl3','Cxcl4','Cxcl5','Cxcl6','Cxcl7','Cxcl8',
            'Cxcl9','Cxcl10','Cxcl11','Cxcl12','Cxcl13','Cxcl14','Cxcl15','Cxcl16','Cxcl17',#CXC 趋化因子亚家族配体 (CXCL)
            'Cxcr1','Cxcr2','Cxcr3','Cxcr4','Cxcr5','Cxcr6',#CXC 趋化因子亚家族受体 (CXCR)
            'Cx3cl1','Cx3cr1',#CX3C 趋化因子亚家族配体受体
            'Xcl1','Xcl2','Xcr1',#XC 趋化因子亚家族配体受体
            'Hk1','Hk2','Hk3','Hk4',#HK
            'Pkm1','Pkm2'#PK
            ,'Tmem119','P2ry12','Cx3cr1','Hexb','Selplg','Cd162','Siglech' #稳态MG
            ,'Cd86','Cd32','Fcgr2b','H2-aa','H2-ab1','Nos2','Il1b','Tnf','Stat1','Irf5'#M1
            ,'Mrc1','Arg1','Ym1','Chi3l3','Il10','Tgfb1','Fizz1','Retnla' #M2
            ,'Mki67','Top2a','Pcna','Cenpf' #增值性MG
            )

jjVolcano(diffData = pbmc.markers,
          myMarkers = mygene,
          aesCol = c('purple','orange'))

#########炎症+代谢:
mygene <- c('Slc2a1', 'Slc2a2', 'Slc2a3', 'Slc2a4',# 葡萄糖转运###糖酵解###
            'Hk1', 'Hk2', 'Hk3','Hk4', # 己糖激酶
            'Gpi1', # 磷酸葡萄糖异构酶
            'Pfkl', 'Pfkm', 'Pfkp', # 磷酸果糖激酶
            'Aldoa', 'Aldob', 'Aldoc', # 醛缩酶
            'Gapdh', # 甘油醛-3-磷酸脱氢酶
            'Pgk1', 'Pgk2',  # 磷酸甘油酸激酶
            'Eno1', 'Eno2', 'Eno3',  # 烯醇化酶
            'Pklr', 'Pkm','Pkm2','Pkm1', # 丙酮酸激酶
            'Ldha', 'Ldhb', 'Ldhc', # 乳酸脱氢酶
            'Ndufa1', 'Ndufa2', 'Ndufb5', 'Ndufs1', 'Ndufs2',# Complex I (NADH脱氢酶)###氧化磷酸化###
            'Sdha', 'Sdhb', 'Sdhc', 'Sdhd',# Complex II (琥珀酸脱氢酶)
            'Uqcrb', 'Uqcrc1', 'Uqcrfs1', 'Cyc1',# Complex III (细胞色素c还原酶)
            'Cox5a', 'Cox4i1', 'Cox6c', 'Cox7c',# Complex IV (细胞色素c氧化酶)
            'Atp5a1', 'Atp5b', 'Atp5c1', 'Atp5d',# Complex V (ATP合酶)
            'Slc25a4', 'Slc25a5', # 辅助因子ATP/ADP转运体
            'Tnfa', 'Il1b', 'Il6', 'Il12a', 'Il23a',  # 促炎细胞因子###促炎因子###
            'Ccl2', 'Ccl3', 'Ccl4', 'Ccl5', 'Cxcl10', # 趋化因子
            'Nos2', 'Ptgs2', 'Cd86', 'Fcgr1', 'Fcgr3',# 炎症介质
            'Nfkb1', 'Stat1', 'Irf5',# 信号分子
            'Il10', 'Tgfb1', 'Tgfb2', 'Tgfb3',# 抗炎细胞因子###抑炎因子###
            'Arg1', 'Ym1', 'Fizz1', 'Cd206',# 修复因子
            'Igf1', 'Vegfa', 'Pdgf', # 生长因子
            'Cd163', 'Mrc1', 'Clec7a',# 膜受体
            'Stat3', 'Stat6', 'Irf4', 'Pparg',# 信号分子
            'Tmem119','P2ry12','Cx3cr1','Hexb','Selplg','Cd162','Siglech', #稳态MG
            'Cd86','Cd32','Fcgr2b','H2-aa','H2-ab1','Nos2','Il1b','Tnf','Stat1','Irf5',#M1
            'Mrc1','Arg1','Ym1','Chi3l3','Il10','Tgfb1','Fizz1','Retnla', #M2
            'Mki67','Top2a','Pcna','Cenpf' #增值性MG
            )

jjVolcano(diffData = pbmc.markers,
          myMarkers = mygene,
          aesCol = c('purple','orange'),
          tile.col = jjAnno::useMyCol("paired", n = 12))
# 修改点的颜色，组合使用
#jjVolcano(diffData = pbmc.markers,aesCol = c('purple','orange'))

# 修改 cluster 矩形颜色，组合使用
#jjVolcano(diffData = pbmc.markers,tile.col = corrplot::COL2('RdBu', 15)[4:12])

# 调整字体和大小
#jjVolcano(diffData = pbmc.markers,
#          tile.col = corrplot::COL2('RdBu', 15)[4:12],
#          size  = 3.5,
#          fontface = 'italic')
###################################分组火山图完事#################################
#####################单细胞 Pseudobulk 分析######################################
##### ========== 新增 Pseudobulk 分析模块（与您原有代码完全兼容）========== #####



##### ========== 新增代码结束（不影响原有流程）========== #####

#####################单细胞 Pseudobulk 分析完事###########################


#一般不做，自动注释
####如果需要用SingleR鉴定细胞类型，用下面代码，但注意选用合适的参考数据集,有些参考数据需要安装scRNAseq包: BiocManager::install("scRNAseq")
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install("SingleR",force = TRUE)  ##安装SingleR
BiocManager::install("celldex")  ##安装celldex
library(SingleR) #加载SingleR
library(celldex) #加载celldex
refdata <- celldex::HumanPrimaryCellAtlasData() #选用参考数据集，需要自行调整，譬如人是HumanPrimaryCellAtlasData是鼠的话需要选MouseRNAseqData，下载这些数据集比较耗时间，建议在网络好时下载
refdata
pbmc_for_SingleR<- pbmc1[["RNA"]]$count
cellpred <- SingleR(test = pbmc_for_SingleR, ref = refdata, labels = refdata$label.fine, clusters = pbmc1@active.ident, assay.type.test = "logcounts", assay.type.ref = "logcounts")##计算每个cluster对应参考数据集中的细胞类型,refdata$label.fine可以修改为refdata$label.main，影响细胞分级选择，建议用fine，细胞类型分的更细，clusters不指定的话对每个细胞单独定义
cellpred$labels
plotScoreHeatmap(cellpred,cellwidth=20,cellheight=9)

##将计算的细胞类型导出
celltype = data.frame(ClusterID=rownames(cellpred), celltype=cellpred$labels, stringsAsFactors = F)
write.table(celltype,"D:/celltype_singleR.xls",row.names = F,sep="\t")

##将计算细胞类型在图中展示
pbmc1@meta.data$singleR=celltype[match(pbmc1@active.ident,celltype$ClusterID),'celltype']
DimPlot(pbmc1, reduction = "umap", group.by = "singleR",label=T, label.size=5)
####

##各种绘图代码##############人的基因全大写，小鼠首字母大写
##绘制Marker基因的tsne图
FeaturePlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                               ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                               ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                               , "Gfap", "Aldh1l1" #星形胶质细胞
                               ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                               ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                               ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                               ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                               ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                               ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                               ,"Cd3d","Cd3e" # T
                               ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                               ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                               ,"Znf683","Cd8a","Cd8b1" # NKT
                               ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                               ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                               ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                               ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                               ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                               ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                               ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                               ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                               ,"Cst3","Lzm","Ppbp" #巨核细胞
                               ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                               ),cols = c("gray", "red"))

##绘制Marker基因的小提琴图
VlnPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           , "Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                           ,"Znf683","Cd8a","Cd8b1" # NKT
                           ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                           ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                           ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                           ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                           ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                           ,"Cst3","Lzm","Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ))

VlnPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           , "Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                           ,"Znf683","Cd8a","Cd8b1" # NKT
                           ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                           ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                           ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                           ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                           ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                           ,"Cst3","Lzm","Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ), slot = "counts", log = TRUE)

##绘制分cluster的热图
pbmc.markers %>% group_by(cluster) %>% dplyr::filter(avg_log2FC > 1) %>% slice_head(n = 10) %>% ungroup() -> top10#n = 10可以自行调整数字
DoHeatmap(pbmc1, features = top10$gene) + NoLegend()
DoHeatmap(subset(pbmc1, downsample = 50),features = top10$gene)+ NoLegend()#每个cluster取50个细胞
DoHeatmap(subset(pbmc1, downsample = 500),features = top10$gene,group.colors = rainbow(9))+scale_fill_gradientn(colors = c("blue", "white", "red"))

##绘制气泡图 #不能有重复注释基因名##############小鼠小鼠小鼠##################################
DotPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           ,"Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hladra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r" #CD4记忆T
                           ,"Znf683" # NKT
                           ,"Cd8","Gzmk"#CD8T
                           ,"Cd40lg" #辅助T Th
                            #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1" #浆细胞
                           ,"Batf3","Clec9a","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcgr3a","Gnly","Tyobp","Prf1" # NK
                           ,"Fcgr3b","Csf3r" #中性粒细胞
                           ,"Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ),cols = c("blue", "red"))+RotatedAxis()
##绘制气泡图 #不能有重复注释基因名##############人人人##################################
DotPlot(pbmc1, features = c(
  "RBFOX3", "TUBB3", "MAP2",                 # 神经元 
  "SOX2", "FABP7", "NES", "PROM1",           # 神经干细胞
  "CCDC153", "TMEM212", "FOXJ1",             # 室管膜细胞
  "GFAP", "ALDH1L1",                         # 星形胶质细胞
  "MBP", "PLP1", "MOG", "MAG",               # 少突胶质细胞
  "TMEM119", "AIF1", "CX3CR1",               # 小胶质细胞
  "CD163", "MRC1", "MS4A7", "PF4", "SIGLEC1", "STAB1",  # 中枢相关巨噬细胞（删除了 CBR2 和 FCRLS）
  "FCGR1A", "CD68", "CD86", "MERTK", "HLA-DRA",        # 髓样细胞（D1V9Y 不存在，HLADRA → HLA-DRA）
  "PECAM1", "VWF", "CLDN5", "FLT1", "SLCO1C1",         # 内皮细胞（删除了 LY6C1）
  "CST3", "LYZ", "CD14", "PTPRC", "CD74",    # 单核+巨噬细胞（LZM → LYZ）
  "CD3D", "CD3E",                            # T 细胞
  "CD27", "CCR7", "CD8A", "CD8B",            # 幼稚T（CD8B1 → CD8B）
  "CD4", "IL7R",                             # CD4记忆T
  "ZNF683",                                  # NKT
  "CD8", "GZMK",                            # CD8T（CD8 → CD8A）
  "CD40LG",                                  # 辅助T Th
  "CD79A", "CD37", "CD19", "CD79B", "MS4A1", # B 细胞（CD20 → MS4A1）
  "IGHG1", "MZB1", "SDC1",                   # 浆细胞
  "BATF3", "CLEC9A", "FLT3",                 # 树突样细胞
  "CD160", "NKG7", "CD247", "CCL3", "GZMB", "FGFBP2", "FCGR3A", "TYROBP", "PRF1", # NK（删除重复的 GZMB）
  "FCGR3B", "CSF3R",                         # 中性粒细胞
  "COL1A1", "COL3A1", "FGFR1", "FN1", "FGF7", "MME"  # 成纤维细胞（COL1A/COL3A → COL1A1/COL3A1）
), cols = c("blue", "red")) + RotatedAxis()




##绘制RidgePlot,不常用，不是看峰值，是看除了峰值还在那里分布
RidgePlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                             ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                             ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                             , "Gfap", "Aldh1l1" #星形胶质细胞
                             ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                             ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                             ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                             ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                             ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                             ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                             ,"Cd3d","Cd3e" # T
                             ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                             ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                             ,"Znf683","Cd8a","Cd8b1" # NKT
                             ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                             ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                             ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                             ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                             ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                             ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                             ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                             ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                             ,"Cst3","Lzm","Ppbp" #巨核细胞
                             ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                             ), ncol = 2)

############取出一部分cluster用来亚分群
sub_pbmc<-subset(pbmc1, idents = '2')
DimPlot(sub_pbmc, reduction = "umap",label = TRUE, pt.size = 1.5)

##########对取出的cluster重新进行分群
sub_pbmc <- FindVariableFeatures(sub_pbmc, selection.method = "vst", nfeatures = 2000)

all.genes <- rownames(sub_pbmc)
sub_pbmc <- ScaleData(sub_pbmc, features = all.genes)

sub_pbmc <- RunPCA(sub_pbmc, features = VariableFeatures(object = sub_pbmc))

sub_pbmc <- FindNeighbors(sub_pbmc, dims = 1:10)

sub_pbmc <- FindClusters(sub_pbmc, resolution = 0.8)

sub_pbmc <- RunTSNE(sub_pbmc, dims = 1:10)

DimPlot(sub_pbmc, reduction = "tsne",label = TRUE, pt.size = 1.5)
###########对二次分群注释
###小鼠
DotPlot(sub_pbmc, features = c("TMEM119","P2ry12","Cx3cr1","Hexb","Selplg","Cd162","Siglech" #稳态MG
                               ,"Cd86","Cd32","Fcgr2b","H2-aa","H2-ab1","Nos2","Il1b","Tnf","Stat1","Irf5"#M1
                               ,"Mrc1","Arg1","Ym1","Chi3l3","Il10","Tgfb1","Fizz1","Retnla" #M2
                               ,"Mki67","Top2a","Pcna","Cenpf" #增值性MG
),cols = c("blue", "red"))+RotatedAxis()

###人
DotPlot(sub_pbmc, features = c("TMEM119","P2RY12","CX3CR1","HEXB","SELPLG","CD162","SIGLEC1" #稳态MG (Cd162/SELPLG需验证)
                               ,"CD86","FCGR2A","FCGR2B","HLA-DRA","HLA-DQB1","NOS2","IL1B","TNF","STAT1","IRF5" #M1 (Cd32→FCGR2A, H2-aa→HLA-DRA, H2-ab1→HLA-DQB1)
                               ,"MRC1","ARG1","YM1","CHI3L1","IL10","TGFB1","RETNLB","RETN" #M2 (Ym1/Chi3l3→CHI3L1, Fizz1→RETNLB, Retnla→RETN)
                               ,"MKI67","TOP2A","PCNA","CENPF" #增殖性MG
), cols = c("blue", "red")) + RotatedAxis()

##每个二次分群cluster按照marker规定细胞类型
new.cluster.ids2 <- c("0" #0
                     , "M1" #1
                     , "2" #2
                     , "3" #3
                     , "M2" #4
)
names(new.cluster.ids2) <- levels(sub_pbmc)
sub_pbmc <- RenameIdents(sub_pbmc, new.cluster.ids2)
DimPlot(sub_pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()

library(ggplot2)
plot <- DimPlot(sub_pbmc, reduction = "umap", label = TRUE, label.size = 4.5) + xlab("UMAP 1") + ylab("UMAP 2") +theme(axis.title = element_text(size = 18), legend.text = element_text(size = 18)) + guides(colour = guide_legend(override.aes = list(size = 10)))
plot 
ggsave(filename = "G:/danxibao/ziliao/scRNA-code/test/pbmc3k_umap.jpg", height = 7, width = 12, plot = plot, quality = 50)

write.table(Idents(sub_pbmc),"G:/danxibao/ziliao/scRNA-code/test/cell-type.xls",sep="\t",quote = F)

##存储细胞归类结果
saveRDS(sub_pbmc, file = "C:/Users/28527/Desktop/scresult/2/pbmc3k_final.rds")

#####################################################################################################

##每个cluster按照marker规定细胞类型
new.cluster.ids <- c("Microglia" #0
                     , "Myeloid cells" #1
                     , "Microglia" #2
                     , "Central nervous system-associated macrophages" #3
                     , "Neutrophil" #4
                     , "Monocyte Macrophage" #5
                     , "Dendritic cells" #6
                     , "Oligodendrocyte" #7
                     , "Neutrophil" #8
                     , "Endothelial Cells" #9
                     , "Macrophage" #10
                     ,"T cells" #11
                     ,"B cells" #12
                     ,"Fibroblast" #13
                     )
names(new.cluster.ids) <- levels(pbmc1)
pbmc1 <- RenameIdents(pbmc1, new.cluster.ids)
DimPlot(pbmc1, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()

library(ggplot2)
plot <- DimPlot(pbmc1, reduction = "umap", label = TRUE, label.size = 4.5) + xlab("UMAP 1") + ylab("UMAP 2") +theme(axis.title = element_text(size = 18), legend.text = element_text(size = 18)) + guides(colour = guide_legend(override.aes = list(size = 10)))
plot
ggsave(filename = "G:/danxibao/ziliao/scRNA-code/test/pbmc3k_umap.jpg", height = 7, width = 12, plot = plot, quality = 50)

write.table(Idents(pbmc1),"G:/danxibao/ziliao/scRNA-code/test/cell-type.xls",sep="\t",quote = F)

##存储细胞归类结果
saveRDS(pbmc1, file = "C:/Users/28527/Desktop/scresult/1/pbmc3k_final.rds")

#计算每个基因在每个细胞亚群中的表达值,
expr <- AverageExpression(pbmc1)##V5里面推荐用AggregateExpression做pseudo-bulk分析
library(pheatmap)
pheatmap(cor(as.matrix(expr$RNA)))

##按照细胞类型绘制Marker基因的小提琴图
VlnPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           , "Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                           ,"Znf683","Cd8a","Cd8b1" # NKT
                           ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                           ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                           ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                           ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                           ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                           ,"Cst3","Lzm","Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ))
VlnPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           , "Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                           ,"Znf683","Cd8a","Cd8b1" # NKT
                           ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                           ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                           ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                           ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                           ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                           ,"Cst3","Lzm","Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ), slot = "counts", log = TRUE)

##按照细胞类型绘制分cluster的热图
DoHeatmap(pbmc1, features = top10$gene) + NoLegend()

##按照细胞类型绘制气泡图
DotPlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                           ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                           ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                           , "Gfap", "Aldh1l1" #星形胶质细胞
                           ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                           ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                           ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                           ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hladra" #髓样细胞
                           ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                           ,"Cst3","Lzm","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                           ,"Cd3d","Cd3e" # T
                           ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                           ,"Cd4","Il7r" #CD4记忆T
                           ,"Znf683" # NKT
                           ,"Cd8","Gzmk"#CD8T
                           ,"Cd40lg" #辅助T Th
                           #杀伤T Tc
                           ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                           ,"Ighg1","Mzb1","Sdc1" #浆细胞
                           ,"Batf3","Clec9a","Flt3" #树突样细胞
                           ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Gnly","Tyobp","Prf1" # NK
                           ,"Fcgr3b","Csf3r" #中性粒细胞
                           ,"Ppbp" #巨核细胞
                           ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                           ),cols = c("blue", "red"))+coord_flip()

##按照细胞类型绘制RidgePlot
RidgePlot(pbmc1, features = c("Rbfox3","Tubb3", "Map2" #神经元 
                             ,"Sox2","Fabp7","Nes","Prom1" #神经干细胞
                             ,"Ccdc153","Tmem212","Foxj1" #室管膜细胞
                             , "Gfap", "Aldh1l1" #星形胶质细胞
                             ,"Mbp","Plp1","Mog","Mag" #少突胶质细胞
                             ,"Tmem119", "Aif1","Cx3cr1" #小胶质细胞
                             ,"Cbr2","Cd163","Fcrls","Mrc1","Ms4a7","Pf4","Siglec1","Stab1" #中枢相关巨噬细胞
                             ,"D1v9y","Fcgr1a","Cd68","Cd86","Mertk","Hla-dra" #髓样细胞
                             ,"Pecam1","Vwf","Cldn5","Flt1","Slco1c1","Ly6c1" #内皮细胞
                             ,"Cst3","Lzm","Cd68","Cd163","Cd14","Ptprc","Cd74" #单核+巨噬细胞
                             ,"Cd3d","Cd3e" # T
                             ,"Cd27","Ccr7","Cd8a","Cd8b1" #幼稚T
                             ,"Cd4","Il7r","Cd27","Ccr7" #CD4记忆T
                             ,"Znf683","Cd8a","Cd8b1" # NKT
                             ,"Cd8","Gzmk","Cd8a","Cd8b1" #CD8T
                             ,"Cd3d","Cd3e","Cd40lg" #辅助T Th
                             ,"Cd3d","Cd3e","Cd8a","Cd8b1" #杀伤T Tc
                             ,"Cd79a","Cd37","Cd19","Cd79b","Ms4a1","Cd20" # B
                             ,"Ighg1","Mzb1","Sdc1","Cd79a" #浆细胞
                             ,"Batf3","Ccr7","D1v9y","Ptprc","Fcgr1a","Cd74","Cd86","Clec9a","Cst3","Flt3" #树突样细胞
                             ,"Cd160","Nkg7","Cd247","Ccl3","Gzmb","Fgfbp2","Fcg3ra","Cx3cr1","Gnly","Tyobp","Prf1" # NK
                             ,"Cst3","Lzm","Fcgr3b","Csf3r" #中性粒细胞
                             ,"Cst3","Lzm","Ppbp" #巨核细胞
                             ,"Col1a","Col3a","Col3a1","Fgfr1","Fn1","Fgf7","Mme" #成纤维细胞
                             ), ncol = 2)

###Clustree包确定分辨率
resolution_values <- seq(0.1, 0.9, by = 0.1)
plots <- list()  # 创建一个列表来存储图
for (resolution in resolution_values) {
  # 执行聚类
  pbmc1 <- FindClusters(pbmc1, resolution = resolution)
  # 绘制UMAP图
  plot <- DimPlot(pbmc1, reduction = "umap")

  # 添加标题
  plot <- plot + ggtitle(paste("Resolution =", resolution))

  plots[[length(plots) + 1]] <- plot
}
# 使用cowplot包排列图
final_plot <- plot_grid(plotlist = plots, ncol = 3)
# 显示最终的排列图
final_plot
clustree(pbmc1@meta.data,prefix = "RNA_snn_res.") 

###如果需要对多个样本进行合并
#merged<- merge(x=object1, y=object2)
#merged<- merge(x=object1, y=c(object2,object3))


###细胞通讯时的输入count和meta文件生成,不过第一行的表头需要按照模板修改
###count文件生成
count_raw <- pbmc1[["RNA"]]@layers$counts
count_norm <- apply(count_raw, 2, function(x) (x/sum(x))*10000)
write.table(count_norm, 'D:/cellphonedb_count.txt', sep ='\t', quote = F)

###meta文件生成
a<-as.matrix(Idents(pbmc1))
b<-cbind(row.names(a),a[,1])
colnames(b)<-c("barcode","cell_type")
write.table(b,"D:/cellphonedb_meta.txt",sep="\t",quote = F,row.names = F)
