volcano3D
包提供了一个分析三类高维数据
的工具。它可以探索三组之间差异表达的基因
。其主要目的是在三维火山图或三向极坐标图中显示差异表达的基因。这些绘图可以使用 plotly 转换为交互式可视化。3 向极坐标图
和3D 火山图
可应用于已测量多个属性并在三个类别之间比较它们的相对水平的任何数据。
R 包安装
方法 1:
install.packages("volcano3D")
方法 2:
library(devtools)
install_github("KatrionaGoldmann/volcano3D")
方法 3:
BiocManager::install("volcano3D")
绘图方法
1.创建极坐标
加载 R 包和数据:
library(volcano3D)
data("example_data")
example_data 包含以下数据:
- syn_example_rld:log 转化的表达矩阵
-
syn_example_meta:样品分组信息,一共 81 个样品(第 1 列),3 个组(第 2 列)
创建极坐标数据:
syn_polar <- polar_coords(outcome = syn_example_meta$Pathotype,
data = t(syn_example_rld))
Q:如何理解极坐标?
A:
polar_coords()
接受原始数据并执行生成坐标、颜色等所需的所有计算,以绘制 3D 火山图或径向 3 向图。简而言之,该函数计算每个组的每个属性/变量的平均值,并将每个组的平均水平映射到沿 xy 平面中的 3 个轴的极坐标上。z 轴绘制为组统计检验(例如似然比检验、单向方差分析或 Kruskal-Wallis 检验)的-log10pval。
该函数polar_coords()
用于将属性映射到极坐标。如果您有 RNA-Seq counts 矩阵,则可以跳过此步骤,可以使用函数deseq_polar()
或 voom_polar()
代替polar_coords()
生成极坐标。
DESeq2
进行差异检验并生成极坐标,示例代码如下:
library(DESeq2)
# setup initial dataset from Tximport
dds <- DESeqDataSetFromTximport(txi = syn_txi,
colData = syn_metadata,
design = ~ Pathotype + Batch + Gender)
# initial analysis run
dds_DE <- DESeq(dds)
# likelihood ratio test on 'Pathotype'
dds_LRT <- DESeq(dds, test = "LRT", reduced = ~ Batch + Gender, parallel = TRUE)
# create 'volc3d' class object for plotting
res <- deseq_polar(dds_DE, dds_LRT, "Pathotype")
# plot 3d volcano plot
volcano3D(res)
voom(edgeR/limma)
方法进行差异检验并生成极坐标,示例代码如下:
library(limma)
library(edgeR)
syn_tpm <- syn_txi$counts # raw counts
resl <- voom_polar(~ 0 + Pathotype + Batch + Gender, syn_metadata, syn_tpm)
volcano3D(resl)
2.绘制径向图
接下来,便是使用极坐标数据绘制径向图。
绘制交互式径向图(动态结果,不便展示):
radial_plotly(syn_polar)
radial_plotly
默认情况下生成一个基于 SVG 的 plotly 对象。具有 10,000 个点的 SVG 可能会很慢,因此对于大量点,我们建议通过将 plotly 对象传递到 toWebGL()
:
radial_plotly(syn_polar) %>% toWebGL()
也可以使用以下方法创建外观非常相似的静态 ggplot 图像 radial_ggplot:
radial_ggplot(syn_polar,
marker_size = 2.3,
legend_size = 10) +
theme(legend.position = "right")
- 是的,这个就是 3-way 径向图。灰色是非差异基因,彩色的点是差异的基因。
3.绘制箱线图
任何一个特定变量(例如基因 COBL)都可以使用箱线图来展示 3 组之间的差异:
plot1 <- boxplot_trio(syn_polar,
value = "COBL",
text_size = 7,
test = "polar_padj",
my_comparisons=list(c("Lymphoid", "Myeloid"),
c("Lymphoid", "Fibroid")))
plot2 <- boxplot_trio(syn_polar,
value = "COBL",
box_colours = c("violet", "gold2"),
levels_order = c("Lymphoid", "Fibroid"),
text_size = 7,
test = "polar_padj"
)
plot3 <- boxplot_trio(syn_polar,
value = "TREX2",
text_size = 7,
stat_size=2.5,
test = "polar_multi_padj",
levels_order = c("Lymphoid", "Myeloid", "Fibroid"),
box_colours = c("blue", "red", "green3"))
ggarrange(plot1, plot2, plot3, ncol=3)
4.绘制 3D 火山图
最后,3D 火山图可用于将 3 组差异比较(例如 3 组之间两两比较的差异基因表达)投影到圆柱极坐标上。
p <- volcano3D(syn_polar)
p
# add_animation(p) 旋转动画
Q:如何理解 3D 火山图?
A:3D,相比于 2 维的火山图其实就多了一个纬度。即将每个基因的分组平均 Z 分数的向量投影到类似于 RGB(红-绿-蓝)颜色空间映射到 HSV(色相饱和度值)的极坐标空间上。每一个点(基因)的极角直接传达了一个基因与一种或多种病理类型(组)相关的程度,而变化倍数 fold change 则由径向尺度的 Z score 替代,z 轴(垂直)依然是-logPval,值越大差异越显著。
然后用红、绿、蓝三种 RGB 原色代表只在一个组上调表达的基因。而复合色(紫、黄、青),则代表在两个组同时上调表达。还有一个灰色代表非显著差异的基因。这也是 3D 火山图中 7 种图例颜色的由来(3+3+1)。
5.图片保存
静态图像:
# jpeg、svg、webp等格式
p %>% plotly::config(toImageButtonOptions = list(format = "svg"))
交互式 HTML:
htmlwidgets::saveWidget(as_widget(p), "volcano3D.html")
引用它
volcano3D
由伦敦玛丽女王大学实验医学与风湿病学系和转化生物信息学中心的生物信息学团队开发,他们是这样解释开发缘由滴:
由于分析的三向性质,多重成对比较使数据解释变得困难。因此,我们开发了一个 3D 火山图,使用圆柱几何来帮助可视化和解释三向组比较。
# 返回引用的信息
citation("volcano3D")
参考资料
https://cran.r-project.org/web/packages/volcano3D/vignettes/Vignette.html#gene-expression-pipeline
OK,今天的分享到此为止,欢迎关注我的
同名
公众号《生信益站
》。