当前位置: 首页 > news >正文

把subset_data的子集重新放到总群allmerge中找marker基因 findallmarkers

把subset_data的子集重新放到总群allmerge中找marker基因 findallmarkers

Idents(All.merge)=All.merge$cell.type
levels(All.merge)
rownames(All.merge@meta.data[Idents(All.merge)=="Monocyte",])
All.merge@meta.data$new.cluster.idents=ifelse( Idents(All.merge)=="Monocyte","Monocyte",
                                     ifelse( Idents(All.merge)=="T cell","T cell",
                                             ifelse( Idents(All.merge)=="B cell","B cell",
                                                     ifelse( Idents(All.merge)=="Ig-producing B cell","Ig-producing B cell",
                                                             ifelse( Idents(All.merge)=="Dendritic cell","Dendritic cell",
                                                                     ifelse( Idents(All.merge)=="Neutrophil","Neutrophil",
                                                                             ifelse( Idents(All.merge)=="NK cell","NK cell",
                                                                                     ifelse(Idents(All.merge)=="Endothelial cell-1","Endothelial cell-1",   
                                                                                            ifelse( Idents(All.merge)=="Endothelial cell-2","Endothelial cell-2",
                                                                                     ifelse( Idents(All.merge)=="Fibroblast","Fibroblast",
                                                                              ifelse(Idents(All.merge)=="Myofibroblast/vascular smooth muscle cell","Myofibroblast/vascular smooth muscle cell",
                                                                    ifelse(Idents(All.merge)=="Cycling basal cell","Cycling basal cell",
                                                              ifelse(Idents(All.merge)=="Ciliated cell","Ciliated cell",
                                                      ifelse(Idents(All.merge)=="Clara cell","Clara cell",
                                              ifelse(Idents(All.merge)=="AT1 cell","AT1 cell",
                                      ifelse(Idents(All.merge)=="AT2 cell-1","AT2 cell-1",
                                  ifelse(Idents(All.merge)=="AT2 cell-2","AT2 cell-2",
                       ifelse(Idents(All.merge)=="Igha+ AT2  cell","Igha+ AT2  cell",
                              ifelse(  rownames(All.merge@meta.data) %in% union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ),"cluster0",
                                       ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ),"cluster1",
                                              ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ),"cluster3","cluster.mixed4_5")
                                       ))   
                          ))))))))))))))))))

table(All.merge$new.cluster.idents)
table(All.merge$cell.type,All.merge$orig.ident)
Idents(All.merge)=All.merge$new.cluster.idents

markers=FindAllMarkers(All.merge,only.pos = TRUE,min.pct = 0.25)

接下来从findallmarkers得到marker基因,选特定cluster批量做dotplot气泡图
在这里插入图片描述

cluster_gene_stat=markers[markers$cluster %in% c("cluster1",
                                                 "cluster.mixed4_5", "cluster0","cluster3"), ]
head(cluster_gene_stat)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f245b8aedf68475782e2856392bb3716.png)

unique(cluster_gene_stat$cluster)
table(cluster_gene_stat$cluster)
cluster_marker=list()
for(i in unique(cluster_gene_stat$cluster)){ #按照p0.05值、flodchange 1标准 获得11个cluster的marker基因 列表
  cluster_marker[[paste("cluster", i, sep = "_")]] <- cluster_gene_stat[cluster_gene_stat$avg_log2FC>1
                                                                        &cluster_gene_stat$p_val<0.001
                                                                        &cluster_gene_stat$cluster==i, "gene"]
}
head(cluster_marker)
unlist(lapply(cluster_marker, length))


getwd()
#批量做气泡图 Dotplot
for (j in names(cluster_marker)) {#一定要记得是向量 而不是一个数 for j in(1:11) 一定记得加括号!!!1:length(cluster_marker!!!!!!!!!
  #j=5
  times=(length(cluster_marker[[j]])+10)/10
  times
  
  if (floor(times)>=2 ){
    for (i in seq(1,330,10)) { #使用循环出图 画图
      #i=1 
      if ((i+9)>(10*floor(times))) {next}   
      print(cluster_marker[[j]][i:(i+9)])
      jpeg(paste0("cluster_",j,"_",paste0(unlist(strsplit(cluster_marker[[j]][i:(i+2)], " "))[seq(1,3,1)],seq='_',collapse = "") , ".jpeg"),height = 9, width = 18, units = 'in', res=300)
      p=DotPlot(All.merge,
                features = cluster_marker[[j]][i:(i+9)])
      print(p)
      dev.off()
      print(paste0("cluster_",j));print(cluster_marker[[j]][i:(i+9)])
    } 
    print(j)
    
  } else{ #条件一定记得加括号! !!!!!!!!!!!!!!!11!!!!!!!!!!!
    print(j); print(cluster_marker[[j]][1:(1+9)])
    jpeg(paste0("cluster_",j,"_",paste0(unlist(strsplit(cluster_marker[[j]][1:(1+2)], " "))[seq(1,3,1)],seq='_',collapse = "") , ".jpeg"),height = 9, width = 18, units = 'in', res=300)
    p=DotPlot(All.merge,features = cluster_marker[[j]][1:(1+9)])
    print(p)
    dev.off()
  } 
}

#测试用
#以下 为踩坑教程 要么是等号的问题
要么是%in%谁在前谁在后的问题
要么是ifelse判断条件的问题
要么是union取并集的元素是否有重复的问题

if(1==1){#https://www.biostars.org/p/408922/
  #AllCells.combined$IGHMPOS <- WhichCells(AllCells.combined, expression = Ighm > 0)
  #https://github.com/satijalab/seurat/issues/2081
  #https://www.datasciencemadesimple.com/union-in-r/
  #https://github.com/satijalab/seurat/issues/2081
  #https://github.com/satijalab/seurat/issues/3079
  #测试用的
  if(1==1){All.merge$newid=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                  ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                         ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge$newid=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                         ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge$newid= ifelse(match(cellname_mycluster[["0"]],colnames(All.merge)),"cluster0",
                          ifelse(match(cellname_mycluster[["1"]],colnames(All.merge)),"cluster1",
                                 ifelse(match(cellname_mycluster[["3"]],colnames(All.merge)),"cluster3","cluster.mixed4_5")))
  
  All.merge$newid= ifelse(colnames(All.merge)[match(cellname_mycluster[["0"]],colnames(All.merge))],"cluster0",
                          ifelse(colnames(All.merge)[match(cellname_mycluster[["1"]],colnames(All.merge))],"cluster1",
                                 ifelse(colnames(All.merge)[match(cellname_mycluster[["3"]],colnames(All.merge))],"cluster3","cluster.mixed4_5")))
  
  All.merge$newid= ifelse(cellname_mycluster[["0"]] %in% names(Idents(All.merge)),"cluster0",
                          ifelse(cellname_mycluster[["1"]] %in% names(Idents(All.merge)),"cluster1",
                                 ifelse(cellname_mycluster[["3"]] %in% names(Idents(All.merge)),"cluster3","cluster.mixed4_5")))
  
  
  All.merge@meta.data= All.merge@meta.data%>% mutate(newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                                                   ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                                                          ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5"))))
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                    ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                           ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),
                                    ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),
                                           ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5"),"cluster1"),"cluster0")
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),
                                    ifelse(cellname_mycluster[["1"]] %in% rownames(All.merge@meta.data),
                                           ifelse(cellname_mycluster[["3"]] %in% rownames(All.merge@meta.data),"cluster3","mix4_5"),"cluster1"),"cluster0")
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),"cluster0",
                                    ifelse(cellname_mycluster[["1"]] %in% rownames(All.merge@meta.data),"cluster1",
                                           ifelse(cellname_mycluster[["3"]] %in% rownames(All.merge@meta.data),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( rownames(All.merge@meta.data)==cellname_mycluster[["0"]],"cluster0",
                                     ifelse(rownames(All.merge@meta.data)==cellname_mycluster[["1"]],"cluster1",
                                            ifelse(rownames(All.merge@meta.data)==cellname_mycluster[["3"]],"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( union(rownames(All.merge@meta.data),cellname_mycluster[["0"]]),"cluster0",
                                     ifelse(union(rownames(All.merge@meta.data),cellname_mycluster[["1"]]),"cluster1",
                                            ifelse(union(rownames(All.merge@meta.data),cellname_mycluster[["3"]]),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( !is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["0"]])),"cluster0",
                                     ifelse(!is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["1"]])),"cluster1",
                                            ifelse(!is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["3"]])),"cluster3","mix4_5")))
  
  
  
  All.merge$cellid=rownames(All.merge@meta.data)
  All.merge@meta.data$newid2=ifelse( cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),"cluster0","mix4_5")
  All.merge@meta.data$newid2=ifelse( !is.na(intersect(cellname_mycluster[["0"]],rownames(All.merge@meta.data))),"cluster0","mix4_5")
  length(row.names(All.merge@meta.data))
  length(cellname_mycluster[["0"]])
  ncol(All.merge)-length(cellname_mycluster[["0"]])
  rep(NA,times=ncol(All.merge)-length(cellname_mycluster[["0"]]))
  union(cellname_mycluster[["0"]],
        rep(paste("NA-"),times=ncol(All.merge)-length(cellname_mycluster[["0"]])) )
  
  myrep0=c(rep(paste("NA-"),times=ncol(All.merge)-length(cellname_mycluster[["0"]])))
  length(myrep0)
  union(myrep0,cellname_mycluster[["0"]])
  length(union(cellname_mycluster[["0"]],myrep0))  #并集的相同元素会被合并,最终只显示一个相同的元素
  
  union(cellname_mycluster[["0"]],
        seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) 
  )
  
  union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) table(All.merge@meta.data$newid2)
  
  seq(1,4,1)
  x <- c(1:4)
  y <- c(2:7)
  union(x,y)
  union(c(1,4532,2,4),c("a","h2",4,2))
  rep(2,times=4)
  length(union(cellname_mycluster[["0"]],rep(NA,times=ncol(All.merge)-length(cellname_mycluster[["0"]]))))
  
  
  
  unique(All.merge@meta.data$newid2)
  table(All.merge@meta.data$newid2)
  grep(rownames(All.merge@meta.data),cellname_mycluster[["0"]])
  union(rownames(All.merge@meta.data),cellname_mycluster[["0"]])
  head(All.merge@meta.data)
  dim(All.merge)
  names(Idents(All.merge))
  table(All.merge$newid)
  table(colnames(All.merge)==cellname_mycluster[["0"]])
  match(c(1,3,5),c(2,3,5,78,9,1))
  }
  
  #######成功!终于成功了!ifelse判断的是向量是否符合某个条件 此处 左右两边的向量长度必须相等, 于是我用union构造相同长度的向量  但是union里面的元素都是不重合的,不会重复!!!!!!!!!!
  All.merge@meta.data$newid2=ifelse(union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) %in% rownames(All.merge@meta.data),
                                    ifelse(union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ) %in% rownames(All.merge@meta.data),
                                           ifelse(union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ) %in% rownames(All.merge@meta.data),"cluster3","mix4_5"),"cluster1"),"cluster0")
  c(1,34,5,4,2,52,1) %in%  c(22,124,1,4,2,34,5,2) 
  seq(1,10-4,1)
  All.merge$newid2=ifelse( Idents(All.merge)=="Monocyte","Monocyte",
                           ifelse( Idents(All.merge)=="T cell","T cell",
                                   ifelse( Idents(All.merge)=="B cell","B cell",
                                           ifelse( Idents(All.merge)=="Ig-producing B cell","Ig-producing B cell",
                                                   ifelse( rownames(All.merge@meta.data) %in% union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ),"cluster0",
                                                           ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ),"cluster1",
                                                                  ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ),"cluster3","cluster.mixed4_5")
                                                           ))))))
  table(All.merge$newid2)
  table(union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) %in% rownames(All.merge@meta.data))
  table(Idents(All.merge)=="Monocyte")
}
library(CellChat)
library(patchwork)
library(ggplot2)
library(ggalluvial)
library(svglite)
library(Seurat)
library(openxlsx)
library(harmony)
library(dplyr)

getwd()
path="G:/silicosis/sicosis/yll/macrophage/no cluster2/0.3/pure_cluster01345_dotplot"
dir.create(path)
setwd(path)
#https://www.jianshu.com/p/cef5663888ff
marker = read.xlsx("G:/silicosis/sicosis/silicosis_ST/overlapped_map/Rigional and cell markers.xlsx", 
                   sheet = "SingleCell_markers")

marker = read.xlsx("G:/silicosis/sicosis/yll/macrophage/no cluster2/0.3/3_Macrophgage_cluster_markers.xlsx")
load("G:/silicosis/sicosis/silicosis-1122-merge/silicosis_cluster_merge.rds")##	改路径

load("G:/silicosis/sicosis/yll/macrophage/no cluster2/macrophage_clean.rds")
getwd()


DimPlot(subset_data)
Idents(subset_data)=subset_data$RNA_snn_res.0.3 #cluster0 1 3 4 5
DimPlot(subset_data,label = TRUE)

table(subset_data$RNA_snn_res.0.3)

cellname_mycluster=list()
for (cluster in c(0,1,3,4,5)) {
  #cluster=0
  mycluster=cluster
  cellname_mycluster[[paste(cluster)]]=colnames(subset_data[,subset_data$RNA_snn_res.0.3==mycluster])
  print(paste('cluster' ,"_",cluster,"====="));print(length(cellname_mycluster[[paste(cluster)]]))
}

names(cellname_mycluster)
FindAllMarkers()
DimPlot(All.merge,label = TRUE, cells.highlight=cellname_mycluster[["0"]])+ggtitle(paste("cluster_","0"))
DimPlot(All.merge,label = TRUE, cells.highlight=cellname_mycluster[["1"]])+ggtitle(paste("cluster_","1"))
DimPlot(All.merge,label = TRUE, cells.highlight=cellname_mycluster[["3"]])+ggtitle(paste("cluster_","3"))
DimPlot(All.merge,label = TRUE, cells.highlight=cellname_mycluster[["4"]])+ggtitle(paste("cluster_","4"))
DimPlot(All.merge,label = TRUE, cells.highlight=cellname_mycluster[["5"]])+ggtitle(paste("cluster_","5"))
length(cellname_mycluster[["0"]])


#测试用
if(1==1){#https://www.biostars.org/p/408922/
  #AllCells.combined$IGHMPOS <- WhichCells(AllCells.combined, expression = Ighm > 0)
  #https://github.com/satijalab/seurat/issues/2081
  #https://www.datasciencemadesimple.com/union-in-r/
  #https://github.com/satijalab/seurat/issues/2081
  #https://github.com/satijalab/seurat/issues/3079
  #测试用的
  if(1==1){All.merge$newid=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                  ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                         ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge$newid=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                         ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge$newid= ifelse(match(cellname_mycluster[["0"]],colnames(All.merge)),"cluster0",
                          ifelse(match(cellname_mycluster[["1"]],colnames(All.merge)),"cluster1",
                                 ifelse(match(cellname_mycluster[["3"]],colnames(All.merge)),"cluster3","cluster.mixed4_5")))
  
  All.merge$newid= ifelse(colnames(All.merge)[match(cellname_mycluster[["0"]],colnames(All.merge))],"cluster0",
                          ifelse(colnames(All.merge)[match(cellname_mycluster[["1"]],colnames(All.merge))],"cluster1",
                                 ifelse(colnames(All.merge)[match(cellname_mycluster[["3"]],colnames(All.merge))],"cluster3","cluster.mixed4_5")))
  
  All.merge$newid= ifelse(cellname_mycluster[["0"]] %in% names(Idents(All.merge)),"cluster0",
                          ifelse(cellname_mycluster[["1"]] %in% names(Idents(All.merge)),"cluster1",
                                 ifelse(cellname_mycluster[["3"]] %in% names(Idents(All.merge)),"cluster3","cluster.mixed4_5")))
  
  
  All.merge@meta.data= All.merge@meta.data%>% mutate(newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                                                   ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                                                          ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5"))))
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),"cluster0",
                                    ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),"cluster1",
                                           ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% colnames(All.merge),
                                    ifelse(cellname_mycluster[["1"]] %in% colnames(All.merge),
                                           ifelse(cellname_mycluster[["3"]] %in% colnames(All.merge),"cluster3","mix4_5"),"cluster1"),"cluster0")
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),
                                    ifelse(cellname_mycluster[["1"]] %in% rownames(All.merge@meta.data),
                                           ifelse(cellname_mycluster[["3"]] %in% rownames(All.merge@meta.data),"cluster3","mix4_5"),"cluster1"),"cluster0")
  
  All.merge@meta.data$newid2=ifelse(cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),"cluster0",
                                    ifelse(cellname_mycluster[["1"]] %in% rownames(All.merge@meta.data),"cluster1",
                                           ifelse(cellname_mycluster[["3"]] %in% rownames(All.merge@meta.data),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( rownames(All.merge@meta.data)==cellname_mycluster[["0"]],"cluster0",
                                     ifelse(rownames(All.merge@meta.data)==cellname_mycluster[["1"]],"cluster1",
                                            ifelse(rownames(All.merge@meta.data)==cellname_mycluster[["3"]],"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( union(rownames(All.merge@meta.data),cellname_mycluster[["0"]]),"cluster0",
                                     ifelse(union(rownames(All.merge@meta.data),cellname_mycluster[["1"]]),"cluster1",
                                            ifelse(union(rownames(All.merge@meta.data),cellname_mycluster[["3"]]),"cluster3","mix4_5")))
  
  All.merge@meta.data$newid2=ifelse( !is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["0"]])),"cluster0",
                                     ifelse(!is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["1"]])),"cluster1",
                                            ifelse(!is.na(intersect(rownames(All.merge@meta.data),cellname_mycluster[["3"]])),"cluster3","mix4_5")))
  
  
  
  All.merge$cellid=rownames(All.merge@meta.data)
  All.merge@meta.data$newid2=ifelse( cellname_mycluster[["0"]] %in% rownames(All.merge@meta.data),"cluster0","mix4_5")
  All.merge@meta.data$newid2=ifelse( !is.na(intersect(cellname_mycluster[["0"]],rownames(All.merge@meta.data))),"cluster0","mix4_5")
  length(row.names(All.merge@meta.data))
  length(cellname_mycluster[["0"]])
  ncol(All.merge)-length(cellname_mycluster[["0"]])
  rep(NA,times=ncol(All.merge)-length(cellname_mycluster[["0"]]))
  union(cellname_mycluster[["0"]],
        rep(paste("NA-"),times=ncol(All.merge)-length(cellname_mycluster[["0"]])) )
  
  myrep0=c(rep(paste("NA-"),times=ncol(All.merge)-length(cellname_mycluster[["0"]])))
  length(myrep0)
  union(myrep0,cellname_mycluster[["0"]])
  length(union(cellname_mycluster[["0"]],myrep0))  #并集的相同元素会被合并,最终只显示一个相同的元素
  
  union(cellname_mycluster[["0"]],
        seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) 
  )
  
  union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) table(All.merge@meta.data$newid2)
  
  seq(1,4,1)
  x <- c(1:4)
  y <- c(2:7)
  union(x,y)
  union(c(1,4532,2,4),c("a","h2",4,2))
  rep(2,times=4)
  length(union(cellname_mycluster[["0"]],rep(NA,times=ncol(All.merge)-length(cellname_mycluster[["0"]]))))
  
  
  
  unique(All.merge@meta.data$newid2)
  table(All.merge@meta.data$newid2)
  grep(rownames(All.merge@meta.data),cellname_mycluster[["0"]])
  union(rownames(All.merge@meta.data),cellname_mycluster[["0"]])
  head(All.merge@meta.data)
  dim(All.merge)
  names(Idents(All.merge))
  table(All.merge$newid)
  table(colnames(All.merge)==cellname_mycluster[["0"]])
  match(c(1,3,5),c(2,3,5,78,9,1))
  }
  
  #######成功!终于成功了!ifelse判断的是向量是否符合某个条件 此处 左右两边的向量长度必须相等, 于是我用union构造相同长度的向量  但是union里面的元素都是不重合的,不会重复!!!!!!!!!!
  All.merge@meta.data$newid2=ifelse(union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) %in% rownames(All.merge@meta.data),
                                    ifelse(union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ) %in% rownames(All.merge@meta.data),
                                           ifelse(union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ) %in% rownames(All.merge@meta.data),"cluster3","mix4_5"),"cluster1"),"cluster0")
  c(1,34,5,4,2,52,1) %in%  c(22,124,1,4,2,34,5,2) 
  seq(1,10-4,1)
  All.merge$newid2=ifelse( Idents(All.merge)=="Monocyte","Monocyte",
                           ifelse( Idents(All.merge)=="T cell","T cell",
                                   ifelse( Idents(All.merge)=="B cell","B cell",
                                           ifelse( Idents(All.merge)=="Ig-producing B cell","Ig-producing B cell",
                                                   ifelse( rownames(All.merge@meta.data) %in% union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ),"cluster0",
                                                           ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ),"cluster1",
                                                                  ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ),"cluster3","cluster.mixed4_5")
                                                           ))))))
  table(All.merge$newid2)
  table(union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ) %in% rownames(All.merge@meta.data))
  table(Idents(All.merge)=="Monocyte")
}
Idents(All.merge)=All.merge$cell.type
levels(All.merge)
rownames(All.merge@meta.data[Idents(All.merge)=="Monocyte",])
All.merge@meta.data$new.cluster.idents=ifelse( Idents(All.merge)=="Monocyte","Monocyte",
                                     ifelse( Idents(All.merge)=="T cell","T cell",
                                             ifelse( Idents(All.merge)=="B cell","B cell",
                                                     ifelse( Idents(All.merge)=="Ig-producing B cell","Ig-producing B cell",
                                                             ifelse( Idents(All.merge)=="Dendritic cell","Dendritic cell",
                                                                     ifelse( Idents(All.merge)=="Neutrophil","Neutrophil",
                                                                             ifelse( Idents(All.merge)=="NK cell","NK cell",
                                                                                     ifelse(Idents(All.merge)=="Endothelial cell-1","Endothelial cell-1",   
                                                                                            ifelse( Idents(All.merge)=="Endothelial cell-2","Endothelial cell-2",
                                                                                     ifelse( Idents(All.merge)=="Fibroblast","Fibroblast",
                                                                              ifelse(Idents(All.merge)=="Myofibroblast/vascular smooth muscle cell","Myofibroblast/vascular smooth muscle cell",
                                                                    ifelse(Idents(All.merge)=="Cycling basal cell","Cycling basal cell",
                                                              ifelse(Idents(All.merge)=="Ciliated cell","Ciliated cell",
                                                      ifelse(Idents(All.merge)=="Clara cell","Clara cell",
                                              ifelse(Idents(All.merge)=="AT1 cell","AT1 cell",
                                      ifelse(Idents(All.merge)=="AT2 cell-1","AT2 cell-1",
                                  ifelse(Idents(All.merge)=="AT2 cell-2","AT2 cell-2",
                       ifelse(Idents(All.merge)=="Igha+ AT2  cell","Igha+ AT2  cell",
                              ifelse(  rownames(All.merge@meta.data) %in% union(cellname_mycluster[["0"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["0"]]),1) ),"cluster0",
                                       ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["1"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["1"]]),1) ),"cluster1",
                                              ifelse(rownames(All.merge@meta.data) %in% union(cellname_mycluster[["3"]],seq(1,ncol(All.merge)-length(cellname_mycluster[["3"]]),1) ),"cluster3","cluster.mixed4_5")
                                       ))   
                          ))))))))))))))))))

table(All.merge$new.cluster.idents)
table(All.merge$cell.type,All.merge$orig.ident)
Idents(All.merge)=All.merge$new.cluster.idents

markers=FindAllMarkers(All.merge,only.pos = TRUE,min.pct = 0.25)
head(markers)
mymarker=markers %>% filter(cluster %in% c("cluster1",
                 "cluster.mixed4_5", "cluster2","cluster3")) %>%
  group_by(cluster) %>%slice_max(avg_log2FC,n=200) %>%slice_min(p_val,n=180)

cluster_gene_stat=mymarker

cluster_gene_stat=markers[markers$cluster %in% c("cluster1",
                                                 "cluster.mixed4_5", "cluster0","cluster3"), ]
head(cluster_gene_stat)
unique(cluster_gene_stat$cluster)
table(cluster_gene_stat$cluster)
cluster_marker=list()
for(i in unique(cluster_gene_stat$cluster)){ #按照p0.05值、flodchange 1标准 获得11个cluster的marker基因 列表
  cluster_marker[[paste("cluster", i, sep = "_")]] <- cluster_gene_stat[cluster_gene_stat$avg_log2FC>1
                                                                        &cluster_gene_stat$p_val<0.001
                                                                        &cluster_gene_stat$cluster==i, "gene"]
}
head(cluster_marker)
unlist(lapply(cluster_marker, length))


getwd()
#批量做气泡图 Dotplot
for (j in names(cluster_marker)) {#一定要记得是向量 而不是一个数 for j in(1:11) 一定记得加括号!!!1:length(cluster_marker!!!!!!!!!
  #j=5
  times=(length(cluster_marker[[j]])+10)/10
  times
  
  if (floor(times)>=2 ){
    for (i in seq(1,330,10)) { #使用循环出图 画图
      #i=1 
      if ((i+9)>(10*floor(times))) {next}   
      print(cluster_marker[[j]][i:(i+9)])
      jpeg(paste0("cluster_",j,"_",paste0(unlist(strsplit(cluster_marker[[j]][i:(i+2)], " "))[seq(1,3,1)],seq='_',collapse = "") , ".jpeg"),height = 9, width = 18, units = 'in', res=300)
      p=DotPlot(All.merge,
                features = cluster_marker[[j]][i:(i+9)])
      print(p)
      dev.off()
      print(paste0("cluster_",j));print(cluster_marker[[j]][i:(i+9)])
    } 
    print(j)
    
  } else{ #条件一定记得加括号! !!!!!!!!!!!!!!!11!!!!!!!!!!!
    print(j); print(cluster_marker[[j]][1:(1+9)])
    jpeg(paste0("cluster_",j,"_",paste0(unlist(strsplit(cluster_marker[[j]][1:(1+2)], " "))[seq(1,3,1)],seq='_',collapse = "") , ".jpeg"),height = 9, width = 18, units = 'in', res=300)
    p=DotPlot(All.merge,features = cluster_marker[[j]][1:(1+9)])
    print(p)
    dev.off()
  } 
}




if(1==1){head(marker)
  unique(marker$cluster)
  
  marker$`macroph-1`
  names(marker)
  
  marker$`macroph-1`
  cellname="macroph-1"
  library(Hmisc)
  mymarker=na.omit(unique(marker$"macroph-1")) %>% capitalize()
  mymarker
  length(mymarker) #查看一共有几个基因
  class(mymarker)
  str(mymarker)}

mymarker=marker %>% filter(p_val==0 &cluster==1) %>% select(gene)
mymarker=marker %>% filter(p_val==0 &cluster==0) %>% select(gene)
mymarker=marker %>% filter(p_val<0.0000000000000000001 &cluster==4) %>% select(gene)
mymarker=marker %>% filter(p_val<0.00000000000001 &cluster==5) %>% select(gene)
mymarker=marker %>% filter(p_val==0 &cluster==3) %>% select(gene)

DotPlot(All.merge,features = mymarker)
DimPlot(All.merge)

mymarker=mymarker$gene[1:15]


macrophage1_gene=as.list(mymarker)
macrophage1_gene=list(mymarker)
macrophage1_gene=list(c("C1qa","C1qb","C1qc"))
macrophage1_gene=list(c("Ccl2","Gpnmb"))


load("G:/silicosis/sicosis/silicosis_ST/yll/0214/harmony_cluster/d_all/silicosis_ST_harmony_SCT_r0.6.rds")

table(Idents(d.all))
Idents(d.all)<-d.all$SCT_snn_res.0.6
table(d.all@meta.data$SCT_snn_res.0.6)
table(d.all@meta.data$SCT_snn_res.0.8,d.all$stim)
table(d.all@meta.data$SCT_snn_res.0.6,d.all$stim)

#对给定的基因集合进行打分
d.all=AddModuleScore(d.all,
                     features = macrophage1_gene,
                     name = "cluster4")
#结果保存在这里
colnames(d.all@meta.data)

SpatialFeaturePlot(d.all,features = c("cluster41"),
                   pt.size.factor = 2.2)+ 
  ggtitle(paste(macrophage1_gene[[1]], collapse = "|"))


d.all@meta.data$"macrophage1_score"
VlnPlot(d.all,features = "macrophage1_gene1")

SpatialDimPlot(d.all, images = "image", label = FALSE
) #sio2_7d

SpatialFeaturePlot(d.all,features = c("macrophage1_gene1"))

SpatialFeaturePlot(NS_7_sct, features = markers[1], slot = "scale.data")+ 
  ggtitle(paste(markers, collapse = "|"))



#ggplot画 ump 和tsne 从seurat中使用addmodule得到的umap 使用ggplot画图
#####
########ggplot画 ump 和tsne 从seurat中使用addmodule得到的umap 使用ggplot画图
load("G:/silicosis/sicosis/silicosis-1122-merge/silicosis_cluster_merge.rds")##	改路径
getwd()
path="G:/silicosis/sicosis/silicosis_ST/yll/0214/harmony_cluster/"
dir.create(path)
setwd(path)

library(openxlsx)
inflammatory_gene=read.xlsx("G:/silicosis/sicosis/silicosis_ST/yll/0214/harmony_cluster/HALLMARK_INFLAMMATORY_RESPONSE.xlsx")

head(inflammatory_gene)
library(Hmisc)
inflammatory_gene=capitalize(tolower(inflammatory_gene$gene_symbol))

inflammatory_gene=list(inflammatory_gene)


#对给定的基因集合进行打分
All.merge=AddModuleScore(All.merge,
                         features = inflammatory_gene,
                         name = "inflammatory_gene")
#结果保存在这里
colnames(All.merge@meta.data)

SpatialFeaturePlot(d.all,features = c("cluster41"),
                   pt.size.factor = 2.2)+ 
  ggtitle(paste(macrophage1_gene[[1]], collapse = "|"))

dim(All.merge)
DimPlot(All.merge,group.by = "cell.type")
VlnPlot(All.merge,features = "inflammatory_gene1",split.by = "stim")
VlnPlot(All.merge,features = "inflammatory_gene1",group.by = "stim")



FeaturePlot(All.merge,split.by = "stim",features ="inflammatory_gene1",label = TRUE,
            cols = c("lightgrey" ,"#DE1F1F")) #cols = c(rgb(220,212,213,180,maxColorValue = 255),rgb(174,27,52,50, maxColorValue = 255))
FeaturePlot(All.merge,split.by = "stim",features ="inflammatory_gene1",
            cols = c(rgb(220,212,213,180,maxColorValue = 255),rgb(174,27,52,50, maxColorValue = 255))
)
FeaturePlot(All.merge,split.by = "stim",features ="inflammatory_gene1",label = TRUE)+
  scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))

FeaturePlot(All.merge,features ="inflammatory_gene1",label = TRUE)+
  scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))+
  facet_wrap(~stim)


#ggplot画 ump 和tsne 从seurat中使用addmodule得到的umap 使用ggplot画图
if(1==1){
  #ggplot画 ump 和tsne 从seurat中使用addmodule得到的umap 使用ggplot画图
  library(ggplot2)
  mydata<- FetchData(All.merge,vars = c("UMAP_1","UMAP_2","inflammatory_gene1","stim"))
  head(mydata)
  boxplot(mydata$inflammatory_gene1)
  a <- ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,colour = inflammatory_gene1))+
    geom_point(size = 1)+
    scale_color_gradientn(values = seq(-0.2,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))
  
  a+ theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                        panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
  #####
  data<- FetchData(All.merge,vars = c("cell.type","inflammatory_gene1","stim"))
  head(data)
  p <- ggplot(data,aes(cell.type,inflammatory_gene1))+geom_boxplot()+theme_bw()+RotatedAxis()
  p+geom_boxplot()+theme_bw()+RotatedAxis()
  
  p+geom_boxplot()+facet_wrap(~stim)  +theme_bw()+RotatedAxis()
  
  ##############
  data<- FetchData(All.merge,vars = c("cell.type","inflammatory_gene1","stim"))
  head(data)
  p <- ggplot(data,aes(cell.type,inflammatory_gene1))+geom_boxplot()+theme_bw()+RotatedAxis()
  p+geom_boxplot()+theme_bw()+RotatedAxis()
  
  p+geom_boxplot()+facet_grid(~stim)  +theme_bw()+RotatedAxis()
  
  ##########333成功!
  data<- FetchData(All.merge,vars = c("cell.type","inflammatory_gene1","stim"))
  head(data)
  p <- ggplot(data,aes(x=cell.type,y=inflammatory_gene1,fill=stim))+
    geom_boxplot()+theme_bw()+RotatedAxis()
  
  p+geom_boxplot()+theme_bw()+RotatedAxis()
  
  #
  mydata<- FetchData(All.merge,vars = c("UMAP_1","UMAP_2","inflammatory_gene1","stim"))
  head(mydata)
  ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                    colour = inflammatory_gene1))+
    geom_point(size = 1)
  
  ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                    colour = inflammatory_gene1))+
    geom_point(aes(colour=stim),size = 1)
  
  ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                    colour = inflammatory_gene1))+
    geom_point(size = 1)+
    facet_wrap(~stim)
  
  ######成功
  ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                    colour = inflammatory_gene1))+ 
    scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  
  
  #new color#https://stackoverflow.com/questions/18487369/ggplot-set-scale-color-gradientn-manually
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradientn(colours = c("red","yellow","green","lightblue","darkblue"),
                           values = c(1.0,0.8,0.6,0.4,0.2,0))+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  
  
  #
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradientn(colours = rainbow(15))+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  #
  library(scales)
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradient2(
      low = muted("blue"),
      mid = "white",
      high = "red",
      # space = "Lab",
      #na.value = "grey50",
      guide = "colourbar",
      aesthetics = "colour"
    )+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  #https://ggplot2.tidyverse.org/reference/scale_gradient.html
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradient2(
      low = muted("blue"),
      mid = "white",
      high = "red",
      # space = "Lab",
      #na.value = "grey50",
      guide = "colourbar",
      aesthetics = "colour"
    )+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  
  #https://ggplot2.tidyverse.org/reference/scale_gradient.html
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradientn(colours = terrain.colors(10))+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  
  #https://ggplot2.tidyverse.org/reference/scale_gradient.html
  ggplot2::ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                             colour = inflammatory_gene1))+ 
    scale_colour_gradient(low = "yellow", high = "red", na.value = NA)+
    geom_point(size = 1)+ 
    facet_wrap(~stim)
  
  #
  mydata<- FetchData(All.merge,vars = c("UMAP_1","UMAP_2","inflammatory_gene1","stim"))
  head(mydata)
  dev.off()
  a <- ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                         colour = inflammatory_gene1))+
    geom_point(size = 1)+
    scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))
  
  a+ theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                        panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
  #####富集得分 富集分数
  head(mydata)
  ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                    colour = inflammatory_gene1))+geom_point(size = 1)+
    scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))+
    facet_wrap(~stim)
  
  
  ###https://www.jianshu.com/p/67d2decf5517
  library(Seurat)
  library(dplyr)
  head(All.merge@meta.data)
  mydata<- FetchData(All.merge,vars = c("UMAP_1","UMAP_2","inflammatory_gene1","stim","cell.type"))
  head(mydata)
  class_avg <- mydata %>%
    group_by(cell.type) %>%
    summarise(
      UMAP_1 = median(UMAP_1),
      UMAP_2 = median(UMAP_2),
      inflammatory_gene1=mean(inflammatory_gene1)
    )
  head(class_avg)
  #https://ggplot2.tidyverse.org/reference/geom_text.html
  #https://ggplot2-book.org/annotations.html?q=text#annotations
  pdf("inflammatoryscore.pdf",width = 15,height = 10)
  p=ggplot(mydata,aes(x = UMAP_1,y =UMAP_2,
                      colour = inflammatory_gene1))+geom_point(size = 1)+
    scale_color_gradientn(values = seq(0,1,0.2),colours = c('blue','cyan','green','yellow','orange','red'))+ #face = c("plain", "bold", "italic")
    geom_text(aes(label = cell.type,fontface="plain",family="sans"), data = class_avg,colour = "red")+  # ggrepel::geom_text_repel(aes(label = cell.type), data = class_avg) +#添加标签
    theme(text=element_text(family="sans",size=18)) + 
    facet_wrap(~stim)+
    theme(panel.background = element_rect(fill='white', colour='black'), 
          panel.grid=element_blank(), axis.title = element_text(color='black',
                                                                family="Arial",size=18),axis.ticks.length = unit(0.4,"lines"), 
          axis.ticks = element_line(color='black'), 
          axis.ticks.margin = unit(0.6,"lines"),
          axis.line = element_line(colour = "black"), 
          axis.title.x=element_text(colour='black', size=18),
          axis.title.y=element_text(colour='black', size=18),
          axis.text=element_text(colour='black',size=18),
          legend.title=element_blank(),
          legend.text=element_text(family="Arial", size=18),
          legend.key=element_blank())+
    theme(plot.title = element_text(size=22,colour = "black",face = "bold"))  + 
    guides(colour = guide_legend(override.aes = list(size=5)))
  print(p)
  dev.off()
  
  
  
  
  ##
  ggplot2::ggplot(data = mydata,mapping = aes(x = UMAP_1,y =UMAP_2,colour = inflammatory_gene1,
                                              fill=stim))+
    geom_bar(stat = "identity",position = "stack")  #stat = "identity"条形的高度表示数据的值,由aes()函数的y参数决定的
  
  
  
  ggplot(mydata, aes(x = UMAP_1,y =UMAP_2))+ 
    geom_boxplot(aes(fill = stim),position=position_dodge(0.5),width=0.6)
  
  
  #https://www.jianshu.com/p/8d65a13dbc88
  # 使用plot函数可视化UMAP的结果
  head(mydata)
  mystim=factor(mydata$stim)
  head(mystim)
  plot(mydata[,c(1,2)],col=mystim,pch=16,asp = 1,
       xlab = "UMAP_1",ylab = "UMAP_2",
       main = "A UMAP visualization of the All.merge")
  # 添加分隔线
  abline(h=0,v=0,lty=2,col="gray")
  # 添加图例
  legend("topright",title = "Species",inset = 0.01,
         legend = unique(mystim),pch=16,
         col = unique(mystim))
  #######################################
  
  # 使用ggplot2包可视化UMAP降维的结果
  library(ggplot2)
  head(mydata)
  ggplot(mydata,aes(UMAP_1,UMAP_2,color=stim)) + 
    geom_point() + theme_bw() + 
    geom_hline(yintercept = 0,lty=2,col="red") + 
    geom_vline(xintercept = 0,lty=2,col="blue",lwd=1) +
    theme(plot.title = element_text(hjust = 0.5)) + 
    labs(x="UMAP_1",y="UMAP_2",
         title = "A UMAP visualization of the iris dataset")
  
  
}














相关文章:

  • 6.2 python 多分支结构if...elif...else 语句
  • 6.3 Python if语句 条件判断嵌套
  • 细胞打分 addmodule addmodule对所有细胞进行循环评分
  • 6.4 序列及range函数
  • 5_addmodule空转spatial空转打分模块inflammatory炎症评分空转炎症评分 addmodule seurat
  • 6.5 python while 循环
  • 6.6 Python for 循环
  • 批量读取文件夹下所有excel文件里的内容,放入列表 把所有不管行列名如何excel合并成一个大的excel 批量读取excel,批量合并excel
  • 6.7 continue 和 break 语句
  • 批量多个excel合并成一个大的excel
  • 7.1 python 自定义函数的创建及调用
  • 7.2 Python return 语句
  • 6_ggplot可视化addmodule得到的炎症评分自己选择颜色 自定义更改显示的颜色 seurat得到的单细胞数据
  • 8.1 Python 类 对象 属性 方法
  • 8.2 类的实例化 调用属性 调用方法
  • 【Leetcode】104. 二叉树的最大深度
  • Android Volley源码解析
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Java Agent 学习笔记
  • JDK9: 集成 Jshell 和 Maven 项目.
  • MySQL的数据类型
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SAP云平台里Global Account和Sub Account的关系
  • 创建一种深思熟虑的文化
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 模型微调
  • 浅谈Golang中select的用法
  • 软件开发学习的5大技巧,你知道吗?
  • 使用API自动生成工具优化前端工作流
  • 说说动画卡顿的解决方案
  • 微服务框架lagom
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 【干货分享】dos命令大全
  • HanLP分词命名实体提取详解
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​力扣解法汇总946-验证栈序列
  • (2)MFC+openGL单文档框架glFrame
  • (备忘)Java Map 遍历
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (九)c52学习之旅-定时器
  • (七)Knockout 创建自定义绑定
  • (一) storm的集群安装与配置
  • (转) ns2/nam与nam实现相关的文件
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Core Web APi类库如何内嵌运行?
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net程序集学习心得
  • .Net接口调试与案例