前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >可视化单细胞亚群的标记基因的5个方法的升级版

可视化单细胞亚群的标记基因的5个方法的升级版

作者头像
生信技能树
发布2021-12-27 16:48:12
2.1K0
发布2021-12-27 16:48:12
举报
文章被收录于专栏:生信技能树生信技能树

以前我们做了一个投票:可视化单细胞亚群的标记基因的5个方法,下面的5个基础函数相信大家都是已经烂熟于心了:

  • VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
  • FeaturePlot(pbmc, features = c("MS4A1", "CD79A"))
  • RidgePlot(pbmc, features = c("MS4A1", "CD79A"), ncol = 1)
  • DotPlot(pbmc, features = unique(features)) + RotatedAxis()
  • DoHeatmap(subset(pbmc, downsample = 100), features = features, size = 3)

但是真实数据分析有时候需要个性化的图表展示,也就是说这5个函数不仅仅是要调整很多参数,甚至需要自定义它们,让我们来看看示例:

下面是郑一一的随机投稿

1.FeaturePlot函数

FeaturePlot使用了split函数之后就没有legend了 这个问题之前困扰了我很久 后来就下定决心解决一下 其实很简单就只是加个命令 参考的是https://github.com/satijalab/seurat/pull/3748

代码语言:javascript
复制
FeaturePlot(object = obj, features = "Gene", split.by = "Meta_Name", order = T) & theme(legend.position = "right")

这个就是你只是用+是不可以的,那样就只会只改split图中右边的那个图 使用&符号的时候是会两个都改的 是不是很神奇 原来我以前只知道+ 后来才发现还有&这个用法

代码语言:javascript
复制
m_featureplot <- FeaturePlot(M_Aggregated_seurat, features = "Lepr", reduction = "tsne",
                             split.by = "orig.ident", pt.size = 1.8, repel = F, label = F,
                             order = T, max.cutoff = 1)
m_featureplot <- m_featureplot & scale_x_continuous(breaks=seq(-30, 20, 10)) ## 改x轴刻度标签
m_featureplot <- m_featureplot & scale_y_continuous(breaks=seq(-30, 20, 10)) ## 改y轴刻度标签
m_featureplot <- m_featureplot +  theme(axis.text.y = element_blank()) +   ## 删去所有刻度标签
                                  theme(axis.ticks.y = element_blank()) +  ##则只删去 Y 轴的刻度线
                                  theme(axis.line.y = element_blank())
m_featureplot <- m_featureplot + ylab("")

FeaturePlot.png

2.VlnPlot的堆叠小提琴图

VlnPlot 中有个stack = T 但是这里面有个bug 因为Seurat::VlnPlot有个bug就是当用split的时候 细胞数目小于3个的时候 就不会画出来 后面又自己想加其他数据所以弄得复杂了点 但是我发现个很好用的方法就是直接把p1$data <- final_data 直接替换成我们想画图的数据就可以直接修改图片了

代码语言:javascript
复制
p1 <- Seurat::VlnPlot(F_Aggregated_seurat, features = ImDEGs, group.by = "small_celltype",
                      stack = T, split.by = "orig.ident",
                      fill.by="ident", flip = T, split.plot = F,adjust=1.3, same.y.lims = T)
p1$data$split <- factor(rep(F_Aggregated_seurat$try, length(ImDEGs)), levels = levels_define)

## GABA1 ob/ob 加6个细胞,  GABA2 ob/ob 加4个细胞 GABA6 ob/ob加8个细胞 那样这三个细胞数目很少的细胞总共就有10个细胞了
## 因为Seurat::VlnPlot有个bug就是当用split的时候 细胞数目小于3个的时候 就不会画出来
GABA1_ob <- 6
GABA2_ob <- 4
GABA6_ob <- 8
add_cell_num <- GABA1_ob + GABA2_ob + GABA6_ob
row_num <- nrow(p1$data) + length(ImDEGs)*add_cell_num
col_num <- ncol(p1$data)
original_row <- nrow(p1$data)
try_data <- matrix(0, row_num, col_num)
try_data[1:original_row, 1:col_num] <- as.matrix(p1$data)
colnames(try_data) <- colnames(p1$data)

GABA1_ob_data <- matrix(0, length(ImDEGs) * GABA1_ob, col_num)
GABA1_ob_data[ ,1] <- rep(ImDEGs, GABA1_ob)
GABA1_ob_data[ ,3] <- rep("GABA1", length(ImDEGs) * GABA1_ob)
GABA1_ob_data[ ,4] <- rep("GABA1_ob/ob", length(ImDEGs) * GABA1_ob)
GABA1_ob_row <- (original_row+nrow(GABA1_ob_data))
try_data[(original_row+1):GABA1_ob_row, 1:4] <- GABA1_ob_data

GABA2_ob_data <- matrix(0, length(ImDEGs) * GABA2_ob, col_num)
GABA2_ob_data[ ,1] <- rep(ImDEGs, GABA2_ob)
GABA2_ob_data[ ,3] <- rep("GABA2", length(ImDEGs) * GABA2_ob)
GABA2_ob_data[ ,4] <- rep("GABA2_ob/ob", length(ImDEGs) * GABA2_ob)
GABA2_ob_row <- GABA1_ob_row + nrow(GABA2_ob_data)
try_data[(GABA1_ob_row+1):GABA2_ob_row, 1:4] <- GABA2_ob_data

GABA6_ob_data <- matrix(0, length(ImDEGs) * GABA6_ob, col_num)
GABA6_ob_data[ ,1] <- rep(ImDEGs, GABA6_ob)
GABA6_ob_data[ ,3] <- rep("GABA6", length(ImDEGs) * GABA6_ob)
GABA6_ob_data[ ,4] <- rep("GABA6_ob/ob", length(ImDEGs) * GABA6_ob)
GABA6_ob_row <- GABA2_ob_row + nrow(GABA6_ob_data)
try_data[(GABA2_ob_row+1):GABA6_ob_row, 1:4] <- GABA6_ob_data

try_data <- as.data.frame(try_data)
try_data$feature <- factor(try_data$feature, levels = ImDEGs)
try_data$expression <- as.numeric(try_data$expression)
try_data$ident <- factor(try_data$ident, levels = levels(p1$data$ident))
try_data$split <- factor(try_data$split, levels = levels(p1$data$split))

dim(try_data)

## 加上所有GABA Glu的细胞
All <- FetchData(F_Aggregated_seurat, vars = ImDEGs)
library(reshape)
All <- melt(All)
colnames(All) <- c("feature", "expression")
head(All)
All$ident <- rep(F_Aggregated_seurat$big_celltype, length(ImDEGs))
All_label <- rep(as.character(F_Aggregated_seurat$orig.ident), length(ImDEGs))
All$split <- paste(All$ident, All_label, sep="_")
colnames(All) <- colnames(try_data)
head(All)
dim(All)

final_data <- rbind(try_data, All)
dim(final_data)

final_data$split <- factor(final_data$split,
                           levels = c(levels_define[1:12], 
                                      "GABA_WT", "GABA_ob/ob",
                                      levels_define[13:18],
                                      "Glu_WT", "Glu_ob/ob"))
final_data$ident <- factor(final_data$ident, 
                           levels = c(levels(try_data$ident)[1:6],
                                      "GABA",
                                      levels(try_data$ident)[7:9],
                                      "Glu"))

levels(final_data$split)
levels(final_data$ident)
levels(final_data$feature)

dim(final_data)

p1$data <- final_data
dim(p1$data)
p3 <- p1 + scale_fill_manual(values = c('#F8766D','#F8766D', '#D39200','#D39200',
                                        '#93AA00', '#93AA00', '#00BA38', '#00BA38',
                                        '#00C19F', '#00C19F', '#00B9E3', '#00B9E3',
                                        "#FC8D62", "#FC8D62",
                                        # "#FFFF33", "#FFFF33",
                                        '#619CFF','#619CFF', '#DB72FB','#DB72FB',
                                        '#FF61C3','#FF61C3',
                                        "#E41A1C", "#E41A1C"))
pdf("20210426_Vlnplot_Female_Gene_Related_to_Energy.pdf", 12, 10)
p3
dev.off()

VlnPlot.png

3.DotPlot函数的图

代码语言:javascript
复制
dotplot_f_data_1 <- DotPlot(F_Aggregated_seurat, features = rev(ImDEGs),
                       group.by = "try",col.min=-2, col.max=2)$data
head(dotplot_f_data_1)
dim(dotplot_f_data_1)

dotplot_f_data_2 <- DotPlot(F_Aggregated_seurat, features = rev(ImDEGs),
                            group.by = "try2",col.min=-2, col.max=2)$data
head(dotplot_f_data_2)
dim(dotplot_f_data_2)

dotplot_f_data <- rbind(dotplot_f_data_1, dotplot_f_data_2)
head(dotplot_f_data)
dim(dotplot_f_data)
table(dotplot_f_data$id)

p_dotplot_f <- DotPlot(F_Aggregated_seurat, features = rev(ImDEGs),col.min=-2, col.max=2)
p_dotplot_f$data <- dotplot_f_data
p_dotplot_f <- p_dotplot_f + coord_flip()
p_dotplot_f <- p_dotplot_f+ scale_color_gradient2(high="red",mid = "lightgrey",low ="darkblue", midpoint = 0) + theme_classic()+ 
  theme(axis.text.x = element_text(angle = -45,hjust = -0.1,vjust = 0.8)) 
p_dotplot_f$data$id <- factor(p_dotplot_f$data$id,
                              levels = c(levels_define[1:12], 
                                         "GABA_WT", "GABA_ob/ob",
                                         levels_define[13:18],
                                         "Glu_WT", "Glu_ob/ob"))
p_dotplot_f

DotPlot.png

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 以前我们做了一个投票:可视化单细胞亚群的标记基因的5个方法,下面的5个基础函数相信大家都是已经烂熟于心了:
  • 1.FeaturePlot函数
  • 2.VlnPlot的堆叠小提琴图
  • 3.DotPlot函数的图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档