R语言可视化11: (sc)RNAseq 数据可视化 - dittoSeq

dittoSeq 是一款对单细胞和批量 RNA 测序数据进行分析和可视化的工具,提供了多种可视化效果,并且允许自定义。
对于单细胞数据,dittoSeq 直接处理在其他软件包(Seurat、scater、scran 等)中预处理的数据。对于批量 RNAseq 数据,dittoSeq 的导入函数会将各种不同结构的批量 RNAseq 数据转换为 dittoSeq 帮助程序和可视化函数可以使用的集合结构

1. \color{green}{scRNA- seq}数据

dittoSeq 本身可与 Seurat 和 SingleCellExperiment 对象配合使用,只需加载数据即可

# 安装并加载所需的R包
# BiocManager::install("dittoSeq")
library(dittoSeq)
library(dplyr)

load("sce.Rdata") # 加载自己的单细胞数据

dittoPlot(sce,
          "MS4A1", # 感兴趣的基因
          group.by = "orig.ident", # 讲将细胞/样本分组的选项
          plots = c("vlnplot", "boxplot"), # 设置绘图类型,包括:jitter, boxplot, vlnplot, ridgeplot。注意顺序
          boxplot.fill = F, # 是否显示异常值
          boxplot.color = 'white', # 箱线图线条颜色
          theme = theme(axis.text = element_text(size = 12, color = 'black'),
                        axis.line = element_line(size = 1),
                        axis.title.y = element_text(size = 15, color = 'black'),
                        plot.title = element_text(size=15, hjust=0.5, color = 'black')),
          ylab = 'Expression',
          y.breaks = seq(0, 5, 1),
          max = 5, min = 0,
          xlab = '',
          x.labels.rotate =F,
          main = "MS4A1",
          legend.show = F)
dittoSeq-1

1.2 细胞比例图

# seurat等单细胞可视化工具在查看细胞比例柱状图时,需先进行细胞比例计算,这里可以直接作图。数据可以表示为百分比或计数,由"scale"输入控制的
p1 <- dittoBarPlot(sce, "Major.CellType", group.by = "orig.ident")
p2 <- dittoBarPlot(sce, "Major.CellType", group.by = "orig.ident", scale = "count")

p1|p2
dittoSeq-2
# dittoFreqPlot可按每种细胞类型分面,sample.by可将组内的细胞分组,group.by成单独的样本
dittoFreqPlot(sce, "Major.CellType", sample.by = "orig.ident", group.by = "class")
dittoSeq-3

2. \color{green}{Bulk} \color{green}{RNA- seq}数据

# 加载数据(制作模拟的表达数据和条件数据)
exp <- matrix(rpois(20000, 5), ncol=20)
colnames(exp) <- paste0("donor", seq_len(ncol(exp)))
rownames(exp) <- paste0("gene", seq_len(nrow(exp)))
logexp <- logexp <- log2(exp + 1)

logexp[1:3,1:6]
##         donor1   donor2   donor3   donor4   donor5   donor6
## gene1 2.584963 1.584963 3.000000 2.000000 2.584963 2.584963
## gene2 1.000000 2.807355 2.584963 2.584963 2.807355 1.584963
## gene3 2.000000 3.000000 2.000000 2.807355 1.584963 3.000000

pca <- matrix(rnorm(20000), nrow=20)
conditions <- factor(rep(1:4, 5))
sex <- c(rep("M", 9), rep("F", 11))

# dittoSeq 本身可处理存储为 SummarizedExperiment 对象的批量 RNAseq 数据
library(SummarizedExperiment)
bulkSE <- SummarizedExperiment(
  assays = list(counts = exp,
                logcounts = logexp), # 每个相当于一个表达矩阵,可存储counts矩阵、TPM矩阵和FPKM矩阵等
  colData = data.frame(conditions = conditions,
                       sex = sex) # 可添加行信息(基因信息,比如gene id, gene name, gene type等)和列信息(样本信息,比如生存时间、生存状态等)
)

# 或者,也可以使用 importDittoBulk() 函数将以其他形式存储的批量数据转换为 SingleCellExperiment 结构
bulkSCE <- importDittoBulk(
    x = list(counts = exp,
             logcounts = logexp), # x可以是 DGEList、DESeqDataSet、SummarizedExperiment 或数据矩阵列表
    metadata = data.frame(conditions = conditions,
                          sex = sex),
    reductions = list(pca = pca)
    )

# meta数据和降维也可以后续添加
bulkSCE$conditions <- conditions
bulkSCE$sex <- sex

bulkSCE <- addDimReduction(
  object = bulkSCE,
  embeddings = pca,
  name = "pca",
  key = "PC")

# 可视化
dittoDimPlot(bulkSCE, "sex", size = 3, do.ellipse = TRUE)

dittoBarPlot(bulkSCE, "sex", group.by = "conditions")

dittoBoxPlot(bulkSCE, "gene1", group.by = "sex")

dittoHeatmap(bulkSCE, getGenes(bulkSCE)[1:10],
             annot.by = c("conditions", "sex"))
dittoSeq-4

3. \color{green}{其他参数}设置

3.1 dittoDimPlot & dittoScatterPlot

# dittoScatterPlot() 的轴是基因表达数据或meta数据,dittoDimPlot() 的轴是降维,如 tsne、pca、umap 或类似数据
dittoScatterPlot(
  object = sce,
  x.var = "nCount_RNA", y.var = "nFeature_RNA",
  color.var = "percent.mito")

dittoDimPlot(sce, "cluster",
             do.label = TRUE,
             labels.repel = FALSE,
             
             add.trajectory.lineages = list(
               c("9","3"),
               c("8","7","2","4"),
               c("8","7","1"),
               c("5","11","6"),
               c("10","0")),
             trajectory.cluster.meta = "cluster")
dittoSeq-5

3.2 dittoDimHex & dittoScatterHex

# 与“Plot”版本类似,绘图区域被分成六边形箱
dittoScatterHex(
  object = sce,
  x.var = "PPY", y.var = "INS",
  color.var = "label",
  colors = c(1:4,7), max.density = 15)

dittoDimHex(sce, "INS")
dittoSeq-6

3.3 dittoPlot (and dittoRidgePlot + dittoBoxPlot wrappers)

# dittoPlot() 是主函数,dittoRidgePlot() 和 dittoBoxPlot() 本质上只是将输入图的默认值从 c(“jitter”, “vlnplot”) 调整为c(“ridgeplot”) 或  or c(“boxplot”,“jitter”)
dittoPlot(sce, "ENO1", group.by = "label",
          plots = c("jitter", "vlnplot", "boxplot"), # <- order matters
          
          # change the color and size of jitter points
          jitter.color = "blue", jitter.size = 0.5,
          
          # change the outline color and width, and remove the fill of boxplots
          boxplot.color = "white", boxplot.width = 0.1,
          boxplot.fill = FALSE,
          
          # change how the violin plot widths are normalized across groups
          vlnplot.scaling = "count"
)


dittoRidgePlot(sce, "ENO1", group.by = "label")

dittoBoxPlot(sce, "ENO1", group.by = "label")
dittoSeq-7

3.4 dittoHeatmap

# Pick Genes
genes <- c("SST", "REG1A", "PPY", "INS", "CELA3A", "PRSS2", "CTRB1",
           "CPA1", "CTRB2" , "REG3A", "REG1B", "PRSS1", "GCG", "CPB1",
           "SPINK1", "CELA3B", "CLPS", "OLFM4", "ACTG1", "FTL")


dittoHeatmap(sce, genes,
             annot.by = c("label", "donor"),
             order.by = "donor",
             scaled.to.max = TRUE,
             show_colnames = FALSE,
             show_rownames = FALSE)

# Highlight certain genes
dittoHeatmap(sce, genes, 
             annot.by = c("label", "donor"),
             highlight.features = genes[1:3],
             complex = TRUE)
dittoSeq-8

3.5 Multi-Plotters (创建多个图,或将多个变量的数据汇总在一个图中)

3.5.1 dittoDotPlot

delta.genes <- c(
  "SST", "RBP4", "LEPR", "PAPPA2", "LY6H",
  "CBLN4", "GPX3", "BCHE", "HHEX", "DPYSL3",
  "SERPINA1", "SEC11C", "ANXA2", "CHGB", "RGS2",
  "FXYD6", "KCNIP1", "SMOC1", "RPL10", "LRFN5")


dittoDotPlot(sce, vars = delta.genes, 
             group.by = "label",
             scale = FALSE)
dittoSeq-9

3.5.2 multi_dittoPlot & dittoPlotVarsAcrossGroups

multi_dittoPlot(sce, delta.genes[1:6], 
                group.by = "label",
                vlnplot.lineweight = 0.2, jitter.size = 0.3)

dittoPlotVarsAcrossGroups(sce, delta.genes, 
                          group.by = "label",
                          main = "Delta-cell Markers")
dittoSeq-10

3.5.3 multi_dittoDimPlot & multi_dittoDimPlotVaryCells

multi_dittoDimPlot(sce, delta.genes[1:6])

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

推荐阅读更多精彩内容