ECharts绘图解决方案——流动关系图(桑基图)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECharts绘图解决方案——流动关系图(桑基图)相关的知识,希望对你有一定的参考价值。

参考技术A 用流动关系图来映射品牌之间的有效换机数量,从而帮助运营对手机品牌的行情做分析和预测。

最终实现效果如下图所示:

以上生成的配置项均可直接粘贴在 https://echarts.apache.org/examples/zh/editor.html?c=line-simple 查看效果。

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

R语言绘制ceRNA冲击图(桑基图)

 

在ceRNA相关的研究中,例如circRNA-miRNA-mRNA,或者lncRNA-miRNA-mRNA的靶向关系图谱,一般通过网络图呈现。 首先可以肯定的是,网络图是一种清晰展示ceRNA网络结构的有效方法。

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

不过同一种类型的图见多了,多少会产生一些审美疲劳。那么,有没有其它的可替代方案呢?本篇则给大家带来一种别致的画风,使用冲击图(或桑基图)代替网络图描述ceRNA网络。
例如文献“ Construction and comprehensive analysis of a ceRNA network to reveal potential prognostic biomarkers for hepatocellular carcinoma ”中描述lncRNA-miRNA-mRNA关系的ceRNA冲击图。

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

冲击图(alluvial)、桑基图(sankey),名称傻傻分不清倒也没关系,很多情况下可以当作一类来看待,它们重在表达变量间的“分流”结构关系。 如何,上图中3者间的结构是不是也很清晰? 如果您也心动了,下面就让我们重现该文献的样式,绘制冲击图展示ceRNA关系。
在原文献附录中,作者提供了上图lncRNA-miRNA-mRNA靶向关系的原始数据,可以直接在原文中获取。 为了方便大家操作,我们已经下载了数据做了本地整理,并和R代码等一起打包,可点击下方“阅读原文”获取。 (备注:若无法成功打开链接,请切换到电脑端网页点击下载)


一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

1    示例文件

示例文件一共两个,“lncRNA_miRNA.txt”记录了lncRNA和miRNA的靶向关系,“miRNA_mRNA.txt”记录了miRNA和mRNA的靶向关系。

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程


一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

2    对应靶向关系

首先将示例数据读入到R中,由于lncRNA-miRNA-mRNA的关系是分两张表记录的,需要将它们整合到一起,做个关系对应。

#读取数据,两个靶向关系表lncRNA_miRNA <- read.delim('lncRNA_miRNA.txt', sep = '	', stringsAsFactors = FALSE)miRNA_mRNA <- read.delim('miRNA_mRNA.txt', sep = '	', stringsAsFactors = FALSE)
#整合靶向关系ceRNA <- merge(lncRNA_miRNA, miRNA_mRNA, by = 'miRNA')ceRNA$link <- 1ceRNA <- reshape::melt(ceRNA, id = 'link')
variable <- summary(ceRNA$variable)ceRNA$flow <- rep(1:variable[1], length(variable))
head(ceRNA) #查看整理后的数据结构

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

整理后的结构中:

variable指明为lncRNA、miRNA还是mRNA;

value为具体的分子名称;

flow为关系流,如果某lncRNA、miRNA和mRNA位于同一条靶向路径中,则flow中的数值是一样的。


一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

3    R包ggalluvial的冲击图(桑基图)绘制

文件结构整理完毕后,绘制冲击图。

R语言中,绘制冲击图的R包其实有很多可以选择。考虑到ggalluvial包是示例文献中使用的作图R包,并且它延伸自ggplot2,语法结构和ggplot2是一致的比较简单易学,因此我们也以ggalluvial包的方法绘制冲击图。

#预指定颜色,lncRNA、miRNA 和 mRNA 总计 36 种,需指定 36 种颜色mycol <- c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5', '#FFED6F', '#E41A1C', '#377EB8', '#4DAF4A', '#984EA3', '#FF7F00', '#FFFF33', '#A65628', '#F781BF', '#66C2A5',  '#6181BD', '#F34800', '#64A10E', '#FF00FF', '#c7475b', '#049a0b', '#BEAED4',  '#FDC086', '#FFFF99', '#386CB0', '#F0027F', '#4253ff', '#ff4308', '#D8D155', '#64495D', '#7CC767')
#ggalluvial 的冲击图library(ggalluvial)
p <- ggplot(ceRNA, aes(x = variable, y = link, stratum = value, alluvium = flow, fill = value)) +geom_stratum() + #冲击图中的堆叠柱形图geom_flow(aes.flow = 'forward') + #冲击图连线绘制scale_fill_manual(values = mycol) + #颜色赋值geom_text(stat = 'stratum', infer.label = TRUE, size = 2.5) + #添加 lncRNA、miRNA 和 mRNA 标签scale_x_discrete(limits = c('lncRNA', 'miRNA', 'mRNA')) + #定义 lncRNA、miRNA 和 mRNA 列的展示顺序labs(x = '', y = '') + #去除 x 轴和 y 轴标题theme(legend.position = 'none', panel.background = element_blank(), line = element_blank(), axis.text.y = element_blank()) #去除背景和图例
p

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

这样,文献中描述lncRNA-miRNA-mRNA关系的ceRNA冲击图就重现出来了,分子间的靶向流结构清晰,样式是不是也很漂亮呢?

此外,若老师或同学们有RNAseq(mRNA、lncRNA、miRNA、circRNA)或蛋白质组等数据分析、绘图等问题疑问,欢迎扫描下方二维码回复,我们会根据大家的需求,选择合适的问题,整理教程



上海生因生物有着丰富的转录组测序、外显子测序数据分析的经验,同时还提供文献或分析思路整理、GEO、TCGA公共数据挖掘、高级个性化定制分析等服务。有这方面试验或数据分析需要的老师,可以添加技术微信联系我们,共同探讨如何寻找基因、分子研究,如何确定分子机制。对于已经在我们公司做过测序的老师,或者打算即将在我们公司做测序的老师,可以享受免费的售后分析服务。


关注技术微信联系数据分析

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程


李纪伟丨写

李纪伟丨审

其他相关资料


点击阅读原文查看更多信息

以上是关于ECharts绘图解决方案——流动关系图(桑基图)的主要内容,如果未能解决你的问题,请参考以下文章

一种ceRNA关系网络的新颖画法,R语言绘制冲击图(桑基图)教程

可视化神器Plotly玩转桑基图

可视化应用案例Python绘制桑吉图

Python 绘制惊艳的桑基图

MATLAB | 特殊绘图小合集 | 金字塔图类桑基图y轴分段填充折线图

origin2017的桑基图在哪