下面这张图,大家不陌生吧,一般是用Velocyto做出来的。
今天我们借助别人的数据,用monocle的轨迹分析结果和Seurat的降维结果实现这张图,从而让轨迹分析在UMAP图上可视化。
首先是Seurat 的二维降维结果(这次我们作为范例啊,这个聚类结果,真的让我一口老血吐出来了,大家分析的时候可要认真分析啊)。
包括二位聚类的坐标文件
其次是monocle轨迹分析的结果(这结果也是奇差无比,声明一下,这是别人的分析结果,我们只是拿来用用啊,大家分析的时候一定要认真)。
包括轨迹的时间分支文件
好,开始我们的绘图大业,其实最核心的内容就是散点图加箭头。
需要创建新的文件,每个细胞发育的方向,也就是每个细胞离得最近的细胞方向
这里共有五个分支,我们先从分支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]]) ##设定每个细胞的发育方向
###以此类推,把所有结果放在一起
拿到如下的结果文件,
好,下一步,箭头的坐标文件
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)
得到如下文件
文件准备好了,开始画图,首先是最初的聚类图
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())
好,接下来要添加箭头了
+ 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")))
箭头太多了,根本看不行,所以呢,我们保留一下发育距离较远的箭头
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")))
这位仁兄的分析结果确实太差了,发育的分析跟随机出现的差不对了。
分cluster看一看,先看cluster1
这样看起来还好一点,再看cluster0
总感觉怪怪的
cluster2
cluster3
cluster4
嗯,cluster4最离谱。
前期分析真的非常重要,不然后面的分析全有问题。至于一些细节的调整,比如箭头的颜色等等,就期待大家去探索吧
不过今天教给大家的绘图知识目的应该是达到了,大家一起加油吧
生活很好,等你超越