Hello小伙伴们大家好,我是生信技能树的小学徒”我才不吃蛋黄“。今天是胃癌单细胞数据集GSE163558复现系列第四期。第三期我们选择0.5分辨率,对细胞进行了分群注释。本期,我们将在第三期基础上使用多种方法可视化细胞和基因。
绘图质量一定程度上会直接影响文章的发表。站在审稿人的角度,好看的图会令人赏心悦目,不好看的图会成为巨大的减分项。好看的图往往逻辑清晰、布局合理、配色协调。
逻辑清晰与否主要体现在机制/流程图上。这张图是全文的重中之重,是作者科研能力、绘图水平和文章质量的集中体现。布局是否合理大图和小图都会涉及。小图需要我们去不断的调整坐标轴、标签、文字的位置、大小和粗细,还有图片的透明度、分组的顺序等等等等。配色协调考验的是绘图人的审美水平。笔者是直男审美,在学习R绘图的时候,数据和代码的问题往往能解决,但就是画的一手丑图。
特别是配色一言难尽,只能找爱逛街的师妹帮忙配色,或者去找高分文章的配色然后直接copy。由于是审美不在线,因此本系列所有的颜色代码,我就老老实实的copy。
看看第三期的图,配色是不是看着很舒服:
在分群注释之后,我们可以使用DimPlot、FeaturePlot、DoHeatmap、DotPlot等多种函数对细胞或基因可视化。
在绘图之前,我们首先创建新的工作目录,并读取第三期亚群注释后的数据:
dir.create("4-plot")
setwd('4-plot/')
sce.all=readRDS( "../3-Celltype/sce_celltype.rds")
sce.all
使用DimPlot函数展示T细胞("0","1")在tSNE图中的位置:
Idents(sce.all)
DimPlot(sce.all,label=T,
reduction = "tsne",pt.size = 0.2,
cells.highlight=list(
T=WhichCells(sce.all, idents = c("0","1"))
),
cols.highlight = c("red"),cols = "grey")
使用FeaturePlot函数展示T细胞maker基因('CD3D', 'CD3E', 'CD8A', 'CD4','CD2')的表达情况:
T_marker <- c('CD3D', 'CD3E', 'CD8A', 'CD4','CD2')
FeaturePlot(sce.all,features = T_marker,reduction = "tsne",cols = c("lightgrey" ,"#DE1F1F"),ncol=2,raster=FALSE)
使用DimPlot函数展示上皮细胞("5","11","12")在tSNE图中的位置:
DimPlot(sce.all,label=T,
reduction = "tsne",pt.size = 0.2,
cells.highlight=list(
Epithelial=WhichCells(sce.all, idents = c("5","11","12"))
),
cols.highlight = c("red"),cols = "grey")
使用FeaturePlot函数展示上皮细胞maker基因('EPCAM','KRT19','CLDN4')的表达情况:
Epithelial_marker <- c('EPCAM','KRT19','CLDN4')
FeaturePlot(sce.all,features = Epithelial_marker,reduction = "tsne",cols = c("lightgrey" ,"#DE1F1F"),ncol=2,raster=FALSE)
FeaturePlot函数展示maker基因的表达也可以帮助我们检查注释准确与否,因此,我们可以批量绘制多个maker基因:
genes_to_check = c('EPCAM','KRT19','CLDN4', #上皮
'PECAM1' , 'CLO1A2', 'VWF', #基质
'CD3D', 'CD3E', 'CD8A', 'CD4','CD2', #T
'CDH5', 'PECAM1', 'VWF', #内皮
'LUM' , 'FGF7', 'MME', #成纤维
'AIF1', 'C1QC','C1QB','LYZ', #巨噬
'MKI67', 'STMN1', 'PCNA', #增殖
'CPA3' ,'CST3', 'KIT', 'TPSAB1','TPSB2',#肥大
'GOS2', 'S100A9','S100A8','CXCL8', #中性粒细胞
'KLRD1', 'GNLY', 'KLRF1','AREG', 'XCL2','HSPA6', #NK
'MS4A1','CD19', 'CD79A','IGHG1','MZB1', 'SDC1', #B
'CSF1R', 'CSF3R', 'CD68') #髓系
##批量画基因
FeaturePlot(sce.all, features =genes_to_check,
cols = c("lightgrey", 'red'),
reduction = "tsne",
ncol = 8 ) & NoLegend() & NoAxes() & theme(
panel.border = element_rect(color = "black", size = 1)
)
FeaturePlot除了可以展示单个基因,还可以把多个基因画在同一个图中。
Featureplot把两个基因画在同一个图中,看右上角可以发现黄色越深的地方两个基因叠加越多。这样可以看两个基因的共表达,是不是和免疫荧光图比较类似:
FeaturePlot(sce.all, features = c('S100A9','S100A8'),
reduction = "tsne",
cols = c("lightgrey", "green", "orange"),
blend=T,blend.threshold=0)
Featureplot还可以把三个基因画在同一个图中:
# 提取tsne坐标
tsne_df <- as.data.frame(sce.all@reductions$tsne@cell.embeddings)
tsne_df$cluster <- as.factor(sce.all$celltype)
head(tsne_df)
# 提取基因表达数据并与tsne坐标合并
gene_df <- as.data.frame(GetAssayData(object = sce.all, slot = "data")[c('S100A9','S100A8','CXCL8'), ])
library(ggnewscale)
merged_df <- merge(t(gene_df), tsne_df, by = 0, all = TRUE)
head(merged_df)
colnames(merged_df)
ggplot(merged_df, vars = c("tSNE_1", "tSNE_2", 'S100A9','S100A8','CXCL8'), aes(x = tSNE_1, y = tSNE_2, colour = S100A9)) +
geom_point(size=0.3, alpha=1) +
scale_colour_gradientn(colours = c("lightgrey", "green"), limits = c(0, 0.3), oob = scales::squish) +
new_scale_color() +
geom_point(aes(colour = S100A8), size=0.3, alpha=0.7) +
scale_colour_gradientn(colours = c("lightgrey", "blue"), limits = c(0.1, 0.2), oob = scales::squish) +
new_scale_color() +
geom_point(aes(colour = CXCL8), size=0.3, alpha=0.1) +
scale_colour_gradientn(colours = c("lightgrey", "red"), limits = c(0, 0.3), oob = scales::squish)+
theme_classic()
此外,我们还可以使用DoHeatmap函数绘制热图,展示每群细胞top基因:
Idents(sce.all)
Idents(sce.all) = sce.all$celltype
sce.markers <- FindAllMarkers(object = sce.all, only.pos = TRUE,
min.pct = 0.25,
thresh.use = 0.25)
write.csv(sce.markers,file='sce.markers.csv')
#sce.markers = read.csv('sce.markers.csv',row.names = 1)
library(dplyr)
top5 <- sce.markers %>% group_by(cluster) %>% top_n(5, avg_log2FC)
#为了防止数据量太大不好出图,这里在每个亚群提取出来100个
DoHeatmap(subset(sce.all,downsample=100),top5$gene,size=3)+scale_fill_gradientn(colors=c("#94C4E1","white","red"))
使用DotPlot函数绘制气泡图:
top5_dotplot <- DotPlot(sce.all, features = top5$gene)+
theme(axis.text.x = element_text(angle = 90, vjust = 1, hjust = 1))
top5_dotplot
本期,我们使用了DimPlot、FeaturePlot、DoHeatmap、DotPlot等多种函数对细胞群和基因进行了可视化。下一期,我们将在此基础上,绘制饼图、堆积柱状图、箱线图、气泡图等,比较不同分组之间细胞比例差异。干货满满,欢迎大家持续追更,谢谢!