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

30-植物单细胞RNA-seq分析教程4-2025年版

 

第 3 节:细胞类型注释与差异基因分析

3.1 细胞类型注释(基于标记基因)

植物顶芽细胞类型主要包括叶肉细胞、表皮细胞、维管细胞等,需根据已知标记基因注释:

# 加载合并后的数据(bud1+bud2,流程见代码2)
load("all.scRNA1.Rdata")# 定义各细胞类型的标记基因(银白杨特异性),maker基因需要自己做blast比对,一个个找,当然现在有了上海王佳伟团队的自动注释和底层标记基因,也可以作为参考,首先输入maker基因的ID,再调节展示的顺序,用ggplot画图。
library(Seurat);library(tidyverse);library(patchwork);library(dplyr);library(ggplot2)
load("all.scRNA1.Rdata")
tmp_markers<- c("evm.TU.Poalb04G018230.1","evm.TU.Poalb03G004160.1","evm.TU.Poalb02G018550.1","evm.TU.Poalb14G017480.1","evm.TU.Poalb10G018750.1","evm.TU.Poalb05G019730.1",
"evm.TU.Poalb17G010740.1","evm.TU.Poalb06G004350.1","evm.TU.Poalb15G004300.1","evm.TU.Poalb04G007380.1","evm.TU.Poalb06G011430.1","evm.TU.Poalb18G011330.1","evm.TU.Poalb14G018220.1",
"evm.TU.Poalb11G012830.1","evm.TU.Poalb02G006740.1","evm.TU.Poalb18G002670.1","evm.TU.Poalb10G007910.1","evm.TU.Poalb08G004890.1","evm.TU.Poalb11G012230.1","evm.TU.Poalb12G007410.1",
"evm.TU.Poalb04G012320.1","evm.TU.Poalb05G021370.1","evm.TU.Poalb16G006810.1","evm.TU.Poalb04G016310.1","evm.TU.Poalb08G004530.1","evm.TU.Poalb05G002250.1","evm.TU.Poalb05G016290.1",
"evm.TU.Poalb01G033570.1","evm.TU.Poalb01G012310.1","evm.TU.Poalb02G008700.1","evm.TU.Poalb07G002120.1","evm.TU.Poalb17G013650.1","evm.TU.Poalb10G007300.1",
"evm.TU.Poalb15G005090.1","evm.TU.Poalb02G012700.1","evm.TU.Poalb09G005650.1","evm.TU.Poalb11G010700.1","evm.TU.Poalb19G005570.1","evm.TU.Poalb07G003080.1")
p1<- DotPlot(scRNA1, features = tmp_markers)
df<- p1$data
#根据id列的因子调节顺序排列
df$id<- factor(df$id,levels=c("3","9","11","10","5","12","15","7","16","2","14","6","13","4","0","1","8"))
#这里可以自行替换features.plot列的名字
df<- df %>%mutate(features.plot=case_when(features.plot=="evm.TU.Poalb04G018230.1"~"FD1(Poalb04G018230.1)",    features.plot=="evm.TU.Poalb03G004160.1"~"PSAH-1(Poalb03G004160.1)",features.plot=="evm.TU.Poalb02G018550.1"~"GAPA(Poalb02G018550.1)",    features.plot=="evm.TU.Poalb14G017480.1"~"LHCA3(Poalb14G017480.1)",features.plot=="evm.TU.Poalb10G018750.1"~"LHCB4.3(Poalb10G018750.1)",    features.plot=="evm.TU.Poalb05G019730.1"~"CAB3(Poalb05G019730.1)",features.plot=="evm.TU.Poalb17G010740.1"~"RBCS2B(Poalb17G010740.1)",    features.plot=="evm.TU.Poalb05G016290.1"~"PDF1(Poalb05G016290.1)",features.plot=="evm.TU.Poalb06G004350.1"~"FDH(Poalb06G004350.1)",    features.plot=="evm.TU.Poalb15G004300.1"~"DCR(Poalb15G004300.1)",features.plot=="evm.TU.Poalb01G033570.1"~"TMM(Poalb01G033570.1)",    features.plot=="evm.TU.Poalb04G007380.1"~"RPL24(Poalb04G007380.1)",features.plot=="evm.TU.Poalb06G011430.1"~"APL(Poalb06G011430.1)",    features.plot=="evm.TU.Poalb14G018220.1"~"CER1(Poalb14G018220.1)",features.plot=="evm.TU.Poalb18G011330.1"~"HB-8(Poalb18G011330.1)",    features.plot=="evm.TU.Poalb11G012830.1"~"SUT4(Poalb11G012830.1)",features.plot=="evm.TU.Poalb02G006740.1"~"WOX4(Poalb02G006740.1)",    features.plot=="evm.TU.Poalb18G002670.1"~"ANT(Poalb18G002670.1)",features.plot=="evm.TU.Poalb10G007910.1"~"HB13(Poalb10G007910.1)",    features.plot=="evm.TU.Poalb08G004890.1"~"BLH8(Poalb08G004890.1)",features.plot=="evm.TU.Poalb11G012230.1"~"STM(Poalb11G012230.1)",    features.plot=="evm.TU.Poalb12G007410.1"~"KNAT6(Poalb12G007410.1)",features.plot=="evm.TU.Poalb04G012320.1"~"POK1(Poalb04G012320.1)",    features.plot=="evm.TU.Poalb04G016310.1"~"KINESIN-12E(Poalb04G016310.1)",features.plot=="evm.TU.Poalb08G004530.1"~"CCS52B(Poalb08G004530.1)",    features.plot=="evm.TU.Poalb05G002250.1"~"TAN1(Poalb05G002250.1)",features.plot=="evm.TU.Poalb05G021370.1"~"CDKB2;2(Poalb05G021370.1)",    features.plot=="evm.TU.Poalb16G006810.1"~"CYCB1;1(Poalb16G006810.1)",features.plot=="evm.TU.Poalb01G012310.1"~"XTH28(Poalb01G012310.1)",    features.plot=="evm.TU.Poalb02G008700.1"~"PME17(Poalb02G008700.1)",features.plot=="evm.TU.Poalb07G002120.1"~"ARGOS(Poalb07G002120.1)", features.plot=="evm.TU.Poalb10G007300.1"~"AP2/ERF(Poalb10G007300.1)",features.plot=="evm.TU.Poalb17G013650.1"~"GRAS(Poalb17G013650.1)", features.plot=="evm.TU.Poalb15G005090.1"~"Chitinase(Poalb15G005090.1)",features.plot=="evm.TU.Poalb02G012700.1"~"LACS(Poalb02G012700.1)", features.plot=="evm.TU.Poalb09G005650.1"~"bHLH(Poalb09G005650.1)",features.plot=="evm.TU.Poalb11G010700.1"~"MYB102(Poalb11G010700.1)", features.plot=="evm.TU.Poalb19G005570.1"~"MYB-CSA(Poalb19G005570.1)",features.plot=="evm.TU.Poalb07G003080.1"~"HD-ZIP(Poalb07G003080.1)")) #这里可以自行替换features.plot列的名字
df<- df %>%mutate(features.plot=case_when(features.plot=="evm.TU.Poalb04G018230.1"~"FD1(Poalb04G018230.1)",    features.plot=="evm.TU.Poalb03G004160.1"~"PSAH-1(Poalb03G004160.1)",features.plot=="evm.TU.Poalb02G018550.1"~"GAPA(Poalb02G018550.1)",    features.plot=="evm.TU.Poalb14G017480.1"~"LHCA3(Poalb14G017480.1)",features.plot=="evm.TU.Poalb10G018750.1"~"LHCB4.3(Poalb10G018750.1)",    features.plot=="evm.TU.Poalb05G019730.1"~"CAB3(Poalb05G019730.1)",features.plot=="evm.TU.Poalb17G010740.1"~"RBCS2B(Poalb17G010740.1)",    features.plot=="evm.TU.Poalb05G016290.1"~"PDF1(Poalb05G016290.1)",features.plot=="evm.TU.Poalb06G004350.1"~"FDH(Poalb06G004350.1)",    features.plot=="evm.TU.Poalb15G004300.1"~"DCR(Poalb15G004300.1)",features.plot=="evm.TU.Poalb01G033570.1"~"TMM(Poalb01G033570.1)",    features.plot=="evm.TU.Poalb04G007380.1"~"RPL24(Poalb04G007380.1)",features.plot=="evm.TU.Poalb06G011430.1"~"APL(Poalb06G011430.1)",    features.plot=="evm.TU.Poalb14G018220.1"~"CER1(Poalb14G018220.1)",features.plot=="evm.TU.Poalb18G011330.1"~"HB-8(Poalb18G011330.1)",    features.plot=="evm.TU.Poalb11G012830.1"~"SUT4(Poalb11G012830.1)",features.plot=="evm.TU.Poalb02G006740.1"~"WOX4(Poalb02G006740.1)",    features.plot=="evm.TU.Poalb18G002670.1"~"ANT(Poalb18G002670.1)",features.plot=="evm.TU.Poalb10G007910.1"~"HB13(Poalb10G007910.1)",    features.plot=="evm.TU.Poalb08G004890.1"~"BLH8(Poalb08G004890.1)",features.plot=="evm.TU.Poalb11G012230.1"~"STM(Poalb11G012230.1)",    features.plot=="evm.TU.Poalb12G007410.1"~"KNAT6(Poalb12G007410.1)",features.plot=="evm.TU.Poalb04G012320.1"~"POK1(Poalb04G012320.1)",    features.plot=="evm.TU.Poalb04G016310.1"~"KINESIN-12E(Poalb04G016310.1)",features.plot=="evm.TU.Poalb08G004530.1"~"CCS52B(Poalb08G004530.1)",    features.plot=="evm.TU.Poalb05G002250.1"~"TAN1(Poalb05G002250.1)",features.plot=="evm.TU.Poalb05G021370.1"~"CDKB2;2(Poalb05G021370.1)",    features.plot=="evm.TU.Poalb16G006810.1"~"CYCB1;1(Poalb16G006810.1)",features.plot=="evm.TU.Poalb01G012310.1"~"XTH28(Poalb01G012310.1)",    features.plot=="evm.TU.Poalb02G008700.1"~"PME17(Poalb02G008700.1)",features.plot=="evm.TU.Poalb07G002120.1"~"ARGOS(Poalb07G002120.1)", features.plot=="evm.TU.Poalb10G007300.1"~"AP2/ERF(Poalb10G007300.1)",features.plot=="evm.TU.Poalb17G013650.1"~"GRAS(Poalb17G013650.1)", features.plot=="evm.TU.Poalb15G005090.1"~"Chitinase(Poalb15G005090.1)",features.plot=="evm.TU.Poalb02G012700.1"~"LACS(Poalb02G012700.1)", features.plot=="evm.TU.Poalb09G005650.1"~"bHLH(Poalb09G005650.1)",features.plot=="evm.TU.Poalb11G010700.1"~"MYB102(Poalb11G010700.1)", features.plot=="evm.TU.Poalb19G005570.1"~"MYB-CSA(Poalb19G005570.1)",features.plot=="evm.TU.Poalb07G003080.1"~"HD-ZIP(Poalb07G003080.1)"))
#还可以自行设计Y轴的顺序。
##########改名分群,方式3,还是ggplot好用#######
library(tidyverse)
library(ggrepel)
umap<- scRNA1@reductions$umap@cell.embeddings %>% as.data.frame() %>% cbind(cell_type=scRNA1@meta.data$seurat_clusters)#先建个表
umap <- umap %>%  mutate(annotation= recode(umap$cell_type, "0"="Undefined","1"="Undefined","2"="SMC","3"="MC","4"="TRI", "5"="EC","6"="IMC","7"="VC","8"="Undefined","9"="MC","10"="PC","11"="MC","12"="EC","13"="IMC","14"="SMC","15"="EC","16"="VC"))#加一列注释
u <- ggplot(umap,aes(UMAP_1, UMAP_2, col=umap$annotation))+geom_point(size=0.5,alpha=1)+theme(panel.grid.major = element_blank(), #主网格线panel.grid.minor = element_blank(), #次网格线panel.border = element_blank(), #边框axis.title = element_blank(),  #轴标题axis.text = element_blank(), # 文本axis.ticks = element_blank(),panel.background = element_rect(fill = 'white'), #背景色plot.background=element_rect(fill="white",),legend.title = element_blank(), #去掉legend.title legend.key=element_rect(fill='white'), #legend.text = element_text(size=20), #设置legend标签的大小legend.key.size=unit(1,'cm') ) +  # 设置legend标签之间的间隔guides(color = guide_legend(override.aes = list(size=5)))+ #设置legend中点的大小geom_segment(aes(x = min(umap$UMAP_1) , y = min(umap$UMAP_2) , #以下是加箭头xend = min(umap$UMAP_1) +5, yend = min(umap$UMAP_2) ),colour = "black", size=1,arrow = arrow(length = unit(0.3,"cm")))+ geom_segment(aes(x = min(umap$UMAP_1)  , y = min(umap$UMAP_2)  ,xend = min(umap$UMAP_1) , yend = min(umap$UMAP_2) + 5),colour = "black", size=1,arrow = arrow(length = unit(0.3,"cm"))) +annotate("text", x = min(umap$UMAP_1) +2, y = min(umap$UMAP_2) -1, label = "UMAP_1",#以下是加文字color="black",size = 6) + annotate("text", x = min(umap$UMAP_1) -1, y = min(umap$UMAP_2) + 2, label = "UMAP_2",color="black",size = 6, angle=90)+annotate("text", x=3.5,y=3.5,label='Undefined',size=10,family='sans',color='black')+annotate("text", x=7,y=-1,label='SMC',size=10,family='sans',color='black')+annotate("text", x=-1,y=-9,label='MC',size=10,family='sans',color='black')+annotate("text", x=-6,y=-3,label='EC',size=10,family='sans',color='black')+annotate("text", x=-15,y=3,label='IMC',size=10,family='sans',color='black')+annotate("text", x=10,y=6,label='VC',size=10,family='sans',color='black')+annotate("text", x=-3,y=-14,label='PC',size=10,family='sans',color='black')+annotate("text", x=-5.2,y=6,label='TRI',size=10,family='sans',color='black')
u
################PDF, LANSCAPE, 10*8#############
#########太牛了,参考教程https://cloud.tencent.com/developer/article/1924260#########

# 手动注释细胞类型(根据标记基因表达模式)
new.cluster.ids <- c("Undefined", "Undefined", "SMC", "MC", "TRI", "EC", "IMC", "VC", "Undefined", "MC", "PC", "MC", "EC", "IMC", "SMC", "EC", "VC")
names(new.cluster.ids) <- levels(scRNA1)
scRNA1 <- RenameIdents(scRNA1, new.cluster.ids)
scRNA1[['cell_type']] <- scRNA1@active.ident  # 保存注释结果到metadata# 可视化注释后结果
pdf("DimPlot_annotated.pdf", height = 6, width = 8)
DimPlot(scRNA1, reduction = "umap", group.by = "cell_type", label = TRUE, pt.size = 0.6) +theme(text = element_text(size = 14), legend.position = "right")
dev.off()#大家还可以对每个cluster进行GO和KEGG富集#

 

image

 

 

#封面:电锯人

 

http://www.jsqmd.com/news/382375/

相关文章:

  • 2026年2月数据恢复在路上:靠谱光盘抛光修复工具厂家推荐,NAS数据恢复软件/视频恢复取证软件,数据恢复直销厂家推荐 - 品牌推荐师
  • Analyzing Spring IOC Source Code
  • 无人机精准授粉,输入,花朵分布图,处理,规划授粉航线,输出,飞行路线。
  • 2026年2月北京丰台区老年社区推荐,高口碑养老机构精选 - 品牌鉴赏师
  • 【Azure App Service】为什么启用 Health Check 后应用服务实例持续显示 Unhealthy?
  • 专业之选:方盾半面罩在工业防护中的关键作用
  • 位运算与进制转化
  • 【Azure App Service】为何应用服务的Health Check功能返回403导致实例状态Unhealthy?
  • 实用指南:HarmonyOS智慧农业管理应用开发教程--高高种地---第1篇:项目初始化与环境搭建
  • 2026年质量好的碳纤维管抛光设备/碳纤维管烘干设备厂家信誉综合参考 - 行业平台推荐
  • 2026胰岛素泵优质品牌专业推荐指南 - 资讯焦点
  • 一篇文章告诉你为什么转行大模型行业?大模型风口已至!小白程序员也能抓住高薪AI赛道,收藏这份进阶指南
  • 一款开源免费、轻量高效、极具手感的在线白板工具
  • 2026年靠谱的苏州非标视觉检测设备/苏州冲压视觉检测设备值得信赖厂家推荐(精选) - 行业平台推荐
  • 2026年评价高的钛材反应釜/威海高压反应釜高评分品牌推荐(畅销) - 行业平台推荐
  • 复分析笔记(2):欧拉公式的理解
  • 2026年知名的响水美标紧定套/合金钢紧定套厂家口碑推荐汇总 - 行业平台推荐
  • 前端工程化与webpack
  • Nodejs+vue+ElementUI货物代运物流系统
  • Treap 的复杂度证明
  • 基于SpringBoot+Vue的Web农产品直卖平台管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • SpringBoot+Vue Web农产品直卖平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • eigen vectors and traffic equations.
  • 小模型足以应对复杂任务?策略拍卖框架SALE带你探索AI的潜力,快来收藏学习!
  • 大模型本地部署指南:小白程序员必备技能,收藏学习!
  • 小白程序员必看:用收藏级TRPO大模型提升技能,附代码实战
  • 小白程序员必看:手把手教你部署本地大模型Ollama,开启AI工程化之路(收藏版)
  • 2026年质量好的天津地源热泵采暖/地源热泵主机供应商采购指南选哪家 - 行业平台推荐
  • 【转行大模型】AI时代职业转型指南:收藏这份超全学习资料,抓住AI时代机遇!
  • 新手转行大模型指南:大模型新手入门指南,收藏这份转行必看资料,助你轻松入行!