lesson5 画!丑!图!

1.小提琴图标注p值

(接lesson4)

仍以基因Rbp1的表达为例

#提取Rbp1的表达量并与metadata中其他信息合并,使metadata中增加一列表示每个细胞的Rbp1表达量
scFURIN =subset(scRNA1,Rbp1>0)
FURIN_exp=scFURIN@assays$RNA@data["Rbp1",]
FURIN_exp.m =scFURIN@meta.data
FURIN_exp.m$exp=FURIN_exp
FURIN_exp.m$Cohort=factor(FURIN_exp.m$orig.ident,levels=c("dapi1","dapi2","CAF1","CAF2"))
#计算p值
library(ggsignif)
#两两计算的分组
my_comparisons=list(c("DapiNeg1","CAF1"),c("DapiNeg2",'CAF2'),
                    c("DapiNeg2" ,"CAF1"))
#可视化
ggplot(FURIN_exp.m,aes(Cohort,exp,fill=Cohort))+
  geom_violin()+theme_classic()+
  theme(plot.title = element_text(size=15,face='bold'),
        axis.text.x = element_text(size=15,face='bold',angle=25,hjust=1,vjust=1),
        axis.text.y = element_text(size=18,face='bold'),
        axis.title.x =element_text(size=0,vjust=1,face='bold'),
        axis.title.y = element_text(size=15,face='bold')) +
  labs(y='Expression',x="Group")+
  geom_signif(comparisons=my_comparisons,step_increase=0.1,map_signif_level=F,test=t.test,size=1,textsize=6)+
  geom_jitter(shape=16,position=position_jitter(0.2))+
  ggtitle("Rbp1")+theme(plot.title=element_text(size=18,hjust=0.5))+
  guides(fill=guide_legend(title=' '))+
  theme(axis.line.x=element_line(linetype=1,color="black",size=1))+
  theme(axis.line.y=element_line(linetype=1,color="black",size=1))+
  theme(legend.text=element_text(size=15))
violin plot with p value

2.比例图标注p值

画比例图

加载数据与r package

##系统报错改为英文
Sys.setenv(LANGUAGE = "en")
##禁止转化为因子
options(stringsAsFactors = FALSE)
##清空环境
rm(list=ls())
setwd("C:/Users/86269/Desktop/shun.C/single_cell")
library(Seurat)
library(tidyverse)
library(dplyr)
library(patchwork)

load("sc.combined.rdata")

为画图挑选颜色

library(RColorBrewer)
qual_col_pals=brewer.pal.info[brewer.pal.info$category=='qual',]
col_vector = unlist(mapply(brewer.pal,qual_col_pals$maxcolors,rownames(qual_col_pals)))

提取细胞的样品来源、cluster以及数量

library(reshape2)
pB2_df <- table(sc.combined@meta.data$new.celltype.2,sc.combined@meta.data$type) %>% melt()
colnames(pB2_df) <- c("Cluster","Sample","Number")

sample_color <- col_vector[1:9]

可视化

pB2 <- ggplot(data = pB2_df,aes(x=Cluster,y=Number,fill=Sample))+
  geom_bar(stat="identity",width=0.8,position="fill")+
  scale_fill_manual(values=sample_color)+
  theme_bw()+
  theme(panel.grid=element_blank())+
  labs(x="",y="Ratio")+
  theme(axis.text.y=element_text(size=12,colour="black"))+
  theme(axis.text.x=element_text(hjust=1,vjust=1,angle=45))
pB2
比例图

该图存在的问题是,三种sample的细胞总数不同,因此正常情况下必须从不同sample中随机抽取同等数量的细胞作比例图才有意义。但是此处三种sample中细胞总数分别为


image.png

数量差别不大,因此可以省去随机抽样这一步

对换横纵坐标

pB3 <- ggplot(data=pB2_df,aes(x=Number,y=Cluster,fill=Sample))+
  geom_bar(stat='identity',width=0.8,position='fill')+
  scale_fill_manual(values=sample_color)+
  theme_bw()+
  theme(panel.grid=element_blank())+
  labs(x="",y="Ratio")+
  theme(axis.text.y=element_text(size=12,colour="black"))+
  theme(axis.text.x=element_text(size=12,colour="black"))+
  theme(
    axis.text.x.bottom =element_text(hjust=1,vjust=1,angle=45)
    
  )
pB3
比例图

将填充颜色对应为细胞种类(即cluster)

pB4 <- ggplot(data=pB2_df,aes(x=Number,y=Sample,fill=Cluster))+
  geom_bar(stat='identity',width=0.8,position='fill')+
  scale_fill_manual(values=col_vector[1:20])+
  theme_bw()+
  theme(panel.grid=element_blank())+
  labs(x="",y="Ratio")+
  theme(axis.text.y=element_text(size=12,colour="black"))+
  theme(axis.text.x=element_text(size=12,colour="black"))+
  theme(
    axis.text.x.bottom =element_text(hjust=1,vjust=1,angle=45)
    
  )
pB4
比例图

在图中标注误差线

#计算细胞比例
x <- table(sc.combined@meta.data$new.celltype.2,sc.combined@meta.data$orig.ident)
#计算每个sample中每种细胞的占比
x3<-t(t(x)/rowSums(t(x)))
x4<-as.data.frame(as.table(t(x3)))
colnames(x4)=c("sample","celltype","Freq")
x4$group =x4$sample %>%str_replace("_.","")

#计算误差线上下值
top<-function(x){
  return(mean(x)+sd(x)/sqrt(length(x)))
}
bottom <- function(x){
  return(mean(x)-sd(x)/sqrt(length(x)))
}

#每个细胞类型在各分组中的情况,以上皮细胞为例
dose_epi <- x4[which(x4$celltype=="Epithelial"),]
 
ggplot(data=dose_epi,aes(x=group,y=Freq,fill=group))+
  stat_summary(geom="bar",fun='mean',
               position=position_dodge(0.9))+
  stat_summary(geom='errorbar',fun.min = bottom,fun.max = top,position=position_dodge(0.9),width=0.2)+
  scale_y_continuous(expand=expansion(mult = c(0.01)))+
  theme_bw()+
  theme(panel.grid=element_blank())+
  labs(x="Group",y="Proportion")+
  geom_point(data=dose_epi,aes(group,Freq),size=1,pch=19)+
  theme(
    axis.text.x.bottom=element_text(hjust=1,vjust=1,angle=45)
    
  )+ggtitle("Epithelial")

带误差线的柱状图,points表示初始数据中单个样本上皮细胞的占比

dose_epi

3.聚类图上加标签

加载数据

##系统报错改为英文
Sys.setenv(LANGUAGE = "en")
##禁止转化为因子
options(stringsAsFactors = FALSE)
##清空环境
rm(list=ls())
setwd("C:/Users/86269/Desktop/shun.C/single_cell")
library(Seurat)
library(tidyverse)
library(dplyr)
library(patchwork)
library(harmony)
library(cowplot)

load("scRNA1.Rdata")

将聚类结果与降维结果整合

x=as.data.frame(scRNA1@active.ident)
df<-scRNA1@reductions$tsne@cell.embeddings
df <- cbind(df,x)
colnames(df)<-c("x","y","ident")
df

初步画出聚类图

p<- ggplot(df,aes(x=x,y=y))+geom_point(aes(colour=ident),size=1)+
  labs(x="t-SNE 1",y="t-SNE 2")
p
p

删去分组信息

p1 <- p+NoLegend()
p1
p1
#加上metadata中的其他信息
meta=scRNA1@meta.data
meta=meta[,c(1:6)]
df.m=merge(df,meta,by=0)
df.m

在图中加上celltype信息

df.m <- df.m %>% group_by(celltype) %>%summarise(x=median(x),y=median(y))
ggplot(df,aes(x,y))+
  geom_point(aes(colour=ident))+
  ggrepel::geom_text_repel(aes(label=celltype),
                           data=df.m,
                           size=5,
                           label.size=1,
                           segment.color=NA)+
  theme(legend.position = "none")+theme_bw()

在图中加上cluster信息

df.m <- df.m %>% group_by(seurat_cluster) %>%summarise(x=median(x),y=median(y))
ggplot(df,aes(x,y))+
  geom_point(aes(colour=ident))+
  ggrepel::geom_text_repel(aes(label=seurat_clusters),
                           data=df.m,
                           size=5,
                           label.size=1,
                           segment.color=NA)+
  theme(legend.position = "none")+theme_bw()

4.在聚类图上画椭圆线(暂时没搞懂)

以p为例


p
obs <- p$data[,c("x","y","ident")]
ellipse_pro <- 0.98
theta <- c(seq(-pi,pi,length=50),seq(pi,-pi,length=50))
circle <- cbind(cos(theta),sin(theta))

ell <- ddply(obs,'ident',function(x){
  if(nrow(x)<=2){
    return(NULL)
  }
  sigma<-var(cbind(x$x,x$y))#求方差
  mu<-c(mean(x$x),mean(x$y))#求平均数
  ed <-sqrt(qchisq(ellipse_pro,df=2))
  data.frame(sweep(circle %*% chol(sigma)*ed,2,mu,FUN="+"))#chol是求一个正定矩阵的上三角矩阵,%*%是矩阵相乘
})
names(ell)[2:3]<- c('x','y')
ell <-ddply(ell,.(ident),function(x)x[chull(x$x,x$y),])
p1 <- p+geom_polygon(data=ell,aes(group=ident),
                     colour= 'black',
                       alpha=1,fill=NA,
                       linetype="dashed")
p1


5.在聚类图中将某些点进行highlight

取某些细胞在聚类图中用不同的颜色标注

#以scRNA1前100个细胞为例
mutlist <- colnames(scRNA1)[1:100]
DimPlot(scRNA1,reduction="tsne",
        cells.highlight = mutlist,
        cols.highlight='#11AA4D',
        sizes.highlight=1.5,
        group.by='orig.ident')

6.3d PCA聚类图

加载数据与package

##系统报错改为英文
Sys.setenv(LANGUAGE = "en")
##禁止转化为因子
options(stringsAsFactors = FALSE)
##清空环境
rm(list=ls())

library(Seurat)
library(scatterplot3d)
setwd("C:/Users/86269/Desktop/shun.C/single_cell")
load("sc.combined.rdata")

数据预处理

#提取三种不同类型的细胞
sc.1=subset(sc.combined,idents = c("Epithelial","Endothelial","Stem_cell"))
#将分组依据换为sample
Idents(sc.1)="orig.ident"
#用取平均值的方式将每个sample的每种细胞合并成一个表达矩阵(将每个sample的每个细胞种类的所有细胞的基因表达量加和,再除以细胞数)
x=AverageExpression(sc.1 ,add.ident ="new.celltype.2")
x=x$RNA
x

进行PCA降维

#PCA降维
pca <- prcomp(t(x))
#提取每个细胞类型的降维结果
pca.data=pca$x
#提取画图需要的PC1,PC2,PC3
pca.data=as.data.frame(pca.data)
pca.data=pca.data[,1:3]

s1 <- strsplit(rownames(pca.data),split = "_")
s2 <- sapply(s1,function(x){x[1]})
s3 <- sapply(s1,function(x){x[3]})
pca.data$Type <- s2
pca.data$celltype = s3

pca.data

可视化

###不同type用形状区分 不同celltype用颜色区分
Type.p=c(rep(11,9),rep(16,9),rep(17,9))
cell.type.p = c(rep(c("blue","red","orange"),9 ))

colors.lib <- c("blue","red","orange")
shapes.lib = c(11,16,17)

###画图
source('huage.3D.plot.R')
s3d <- scatterplot3d(pca.data[,c("PC1","PC2","PC3")],
                     pch = Type.p,color = cell.type.p,                   
                     cex.symbols = 1,grid=FALSE, box=FALSE,                     
                     main = "3D PCA plot")
#加入celltype信息
legend("topright",
       c("Epithelial","Endothelial","Stem_cell"),
       fill=c('blue',"red","orange"),
       box.col=NA,
       cex=0.6)

#加入type信息
legend("topleft",
       c('GF','SPF','FMT'),
       pch = shapes.lib,
       box.col=NA,
       cex =0.6,
       y.intersp = 0.5)
#加上平面
addgrids3d(pca.data[,c("PC1","PC2","PC3")], grid = c("xy", "xz", "yz"))
3D PCA plot

从图中可看出不同分组里哪些细胞类型差异较大,分散越明显差异越大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容