10X单细胞(10X空间转录组)轨迹分析之绘图

下面这张图,大家不陌生吧,一般是用Velocyto做出来的。

图片.png

今天我们借助别人的数据,用monocle的轨迹分析结果和Seurat的降维结果实现这张图,从而让轨迹分析在UMAP图上可视化。

首先是Seurat 的二维降维结果(这次我们作为范例啊,这个聚类结果,真的让我一口老血吐出来了,大家分析的时候可要认真分析啊)。

MK_cell_clusters_UMAP.png

包括二位聚类的坐标文件

图片.png

其次是monocle轨迹分析的结果(这结果也是奇差无比,声明一下,这是别人的分析结果,我们只是拿来用用啊,大家分析的时候一定要认真)。

Pseudotime_cell_trajectory.png

包括轨迹的时间分支文件

图片.png

好,开始我们的绘图大业,其实最核心的内容就是散点图加箭头。

需要创建新的文件,每个细胞发育的方向,也就是每个细胞离得最近的细胞方向

这里共有五个分支,我们先从分支1开始

data = read.csv(monolce.csv,header = T, row.names = 1,check.names = F)
State1 = subset(data,data$State == 1)
State1 = State1[order(State1$State),]  ###按照时间排序
State1$to = c(rownames(State1)[2:dim(State1)[1]],rownames(State1)[dim(State1)[1]])  ##设定每个细胞的发育方向
###以此类推,把所有结果放在一起

拿到如下的结果文件,

图片.png

好,下一步,箭头的坐标文件

coor = read.csv(UMAP.csv,header = T,row.names = 1)  ###  UMAP的坐标文件、
coor = coor[rownames(State),]  ##按照时间排序
coor_to = State[zhao$to,]
coor_from_to = cbind(coor,coor_to)###箭头坐标文件
colnames(coor_from_to) = c('x','y','x1','y1')
###当然,还需要聚类文件
cluster= read.csv(cluster.csv,header = T,row.names =1 )
cluster = cluster[rownames(coor_from_to),]
coor_from_to_cluster = cbind(coor_from_to,cluster)
head(coor_from_to_cluster)

得到如下文件

图片.png

文件准备好了,开始画图,首先是最初的聚类图

setwd('C:/Users/86178/Desktop')
library(ggplot2)
data = read.csv('coor_from_to_cluster.csv',header = T,row.names = 1)
head(data)
data$cluster = as.factor(data$cluster)
ggplot(data,aes(data$x,data$y,color = data$cluster)) + geom_point(size = 2) + theme_bw() +
  labs(x = 'UMAP_1',y = 'UMAP_2',color = 'Cluster') + theme(axis.text = element_text(size = 15),axis.title = element_text(size = 20)) +
  guides(color = guide_legend(override.aes = list(size = 5))) + theme(legend.title = element_text(size =20),legend.text = element_text(size = 15))+
  theme(panel.grid = element_blank())
图片.png

好,接下来要添加箭头了

+ geom_curve(aes(x = data$x,y = data$y,xend = data$x1,yend = data$y1),colour = "#555555",                              
                                                    size=0.5,                              
                                                    curvature = -0.2,                             
                                                    arrow = arrow(length = unit(0.03, "npc")))

这个时候报错,Error in calcCurveGrob(x, x$debug) : end points must not be identical,看来箭头的长度不能太短

+ geom_curve(aes(x = data$x,y = data$y,xend = data$x1 + 0.02,yend = data$y1 + 0.02),colour = "#555555",                              
                                                    size=0.5,                              
                                                    curvature = -0.2,                             
                                                    arrow = arrow(length = unit(0.03, "npc")))
图片.png

箭头太多了,根本看不行,所以呢,我们保留一下发育距离较远的箭头

geom_curve(data = data1,aes(x = data1$x,y = data1$y,xend = data1$x1 +0.02,yend = data1$y1 + 0.02),colour = "#555555",                              
                                                    size=1, arrow.fill = 'red',                             
                                                    curvature = 0.2,                            
                                                    arrow = arrow(length = unit(0.03, "npc")))
图片.png

这位仁兄的分析结果确实太差了,发育的分析跟随机出现的差不对了。

分cluster看一看,先看cluster1

图片.png

这样看起来还好一点,再看cluster0

图片.png

总感觉怪怪的

cluster2

图片.png

cluster3

图片.png

cluster4

图片.png

嗯,cluster4最离谱。

前期分析真的非常重要,不然后面的分析全有问题。至于一些细节的调整,比如箭头的颜色等等,就期待大家去探索吧

不过今天教给大家的绘图知识目的应该是达到了,大家一起加油吧

生活很好,等你超越

你可能感兴趣的:(10X单细胞(10X空间转录组)轨迹分析之绘图)