桑基图(Sankey)的简单实现

ggforce这个R包一身都是宝,之前的贝塞尔曲线就来自于这个包。
无处不在的贝塞尔曲线

里面还有很多奇怪的函数,我会一个一个地介绍。
今天看到他有个图层可以简单实现桑基图,实际上我并不知道这是什么图,我只是看别人画过。

我们今天结合这个图层来展示一下,如何用别人的代码,套自己的数据。

首先,运行别人的例子

他使用的是泰坦尼克的数据

data <- reshape2::melt(Titanic)
head(data)
桑基图(Sankey)的简单实现_第1张图片

这是一个数据框,前面四列都是分类变量,告诉我们这个数据能分成几类。

要想正确使用图层,需要进行数据的变换,ggforce中内置了一个函数做这个事情,这个函数的第二个参数,指定哪些类别是要展示在x轴上的,这里是1到4列。

data <- gather_set_data(data, 1:4)
head(data)
桑基图(Sankey)的简单实现_第2张图片

现在这个数据变成了这个样子,后面的是多出来的数据,然后就可以画图的了。

library(ggplot2)
library(ggforce)
ggplot(data, aes(x, id = id, split = y, value = value)) +
  geom_parallel_sets(aes(fill = Survived), alpha = 0.3, axis.width = 0.1) +
  geom_parallel_sets_axes(axis.width = 0.1) +
  geom_parallel_sets_labels(colour = 'white')
桑基图(Sankey)的简单实现_第3张图片

通过用生存的信息给图上色,我们能够很直观地看出泰坦尼克号上人员的生存状态。

接着,尝试对接自己的数据

这个数据跟TCGA 基因和临床信息结合的例子比较像,正好我手上有这个数据,就来试一下。

桑基图(Sankey)的简单实现_第4张图片

最后一列是基因的表达量,前面是临床信息。这个数据几乎不需要任何修改直接可以用刚才的代码。
我们还用到了factor排序的功能来调整横坐标的顺序。
因子(factor)就像贤内助,让你始终分清主次,拨开云雾。

library(ggplot2)
library(ggforce)
data <- gather_set_data(data, 1:6)
data$x <- factor(data$x,levels = c("Survived","gene","sample","age","gender","stage"),ordered = F)
ggplot(data, aes(x, id = id, split = y, value = value)) +
  geom_parallel_sets(aes(fill = Survived), alpha = 0.3, axis.width = 0.1) +
  geom_parallel_sets_axes(axis.width = 0.2) +
  geom_parallel_sets_labels(colour = 'white')
桑基图(Sankey)的简单实现_第5张图片

但是觉得这个图虽然新颖,但是放在这里也不是很合适。我认为,这个图应当用于microRNA以及其靶基因的展示,第三列再方式富集分析的条目就比较合适了,当后面碰到了microRNA的数据我们再来造。

现在看来,只要是别人教程里面的图我们都能够复现,我们只要考虑自己的数据适合用哪种图展示就可以了。

刚才在写编辑帖子的时候,我们家的房子在摇动,经历过2008年5月12号的那个大地震后,我们相对比较淡定,妻子说要下楼,大概30s后停住了。今天的震感和那天的极为相似,震级应该不算小,希望大家都平安。

我是果子,明天见。

你可能感兴趣的:(桑基图(Sankey)的简单实现)