如何才能得到这么漂亮的3D火山图

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,今天的分享到此为止,欢迎关注我的同名公众号《生信益站》。

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

推荐阅读更多精彩内容