专栏首页生信修炼手册冲击图和桑基图,傻傻分不清楚!

冲击图和桑基图,傻傻分不清楚!

在之前的文章中,我们介绍了桑基图的可视化原理,而冲击图作为桑基图的一个子类,其展示的信息和桑基图基本一致,只不过在输入数据的格式上要略作调整。

绘制冲击图,推荐使用ggalluvial这个R包,从名字也可以看出,这个一个建立在ggplot2语法基础上的扩展包,官方链接如下

http://corybrunson.github.io/ggalluvial/articles/ggalluvial.html

首先通过一个冲击图的示例来了解下图中的基本元素

包括以下几种元素

1. axis, 即x轴代表的元素,在图中表现为每个竖直方向堆叠的柱状图,Gender, Dept

2. strata, 每个axis的分类标准,比如Gender的Strata 对应Male, Female

3. Freq, 即y轴代表的元素,对于每一个竖直方向的柱子,其各个子类Freq的总和是相同的

4. Admit, 即图例代表的元素,根据这个状态,把柱子间的连线,即代表数据流动的link分成了两类

要绘制这样的一幅图,首先来看下输入数据的格式

> library(ggalluvial)
> data_wide <- as.data.frame(UCBAdmissions)
> head(data_wide)
     Admit Gender Dept Freq
1 Admitted   Male    A  512
2 Rejected   Male    A  313
3 Admitted Female    A   89
4 Rejected Female    A   19
5 Admitted   Male    B  353
6 Rejected   Male    B  207

这样的数据格式为称之为宽格式,可以看到x轴的数据,对应的是数据框中的列,先用默认参数看下效果,代码如下

> ggplot(data_wide, aes(y = Freq, axis1 = Gender, axis2 = Dept)) +
+   geom_alluvium() +
+   geom_stratum() +
+   geom_label(stat = "stratum", aes(label = after_stat(stratum)))

效果图如下

为了达到示例图中的效果,我们需要做一下调整

1. 把柱子的填充色设置为黑色

2. 把柱子的宽度变窄

3. 把连线按照Admit属性赋予不同颜色

4. 添加x轴标签

代码如下

> ggplot(data_wide, aes(y = Freq, axis1 = Gender, axis2 = Dept)) +
+   geom_alluvium(aes(fill = Admit), width = 1/4) +
+   geom_stratum(fill = "black", colour = "white", width = 1/4) +
+   geom_label(stat = "stratum", aes(label = after_stat(stratum))) +
+   scale_x_continuous(breaks = 1:2, labels = c("Gender", "Dept"))

效果图如下

宽格式的数据适合柱子较少的情况,我们可以依次在代码中指定需要绘制的列,但是当柱子较多时,使用这种宽格式就比较费时了,此时,就可以使用长格式的输入文件,示例如下

> data_long <- to_lodes_form(data_wide, axies = 2:3,  id = "num")
> head(data_long)
     Admit Freq num      x stratum
1 Admitted  512   1 Gender    Male
2 Rejected  313   2 Gender    Male
3 Admitted   89   3 Gender  Female
4 Rejected   19   4 Gender  Female
5 Admitted  353   5 Gender    Male
6 Rejected  207   6 Gender    Male
> ggplot(data_long,
+   aes(x = x, y = Freq, fill =  Admit, stratum = stratum, alluvium = num)) +
+   geom_flow() +
+   geom_stratum(fill = "black", colour = "white") +
+   geom_label(stat = "stratum", aes(label = after_stat(stratum)), fill = "white")

效果图如下

宽数据比较符合我们的常规直觉,而长数据则是ggplot2绘图语法的直接适配者,核心还是那句话,任意一个图中的元素都对应数据框中的某一列。

通过长数据,我们可以更好的控制图形中各种属性的映射,比如官方自带的一个示例

> ggplot(vaccinations,
+        aes(x = survey, stratum = response, alluvium = subject,
+            y = freq,
+            fill = response, label = response)) +
+   scale_x_discrete(expand = c(.1, .1)) +
+   geom_flow() +
+   geom_stratum(alpha = .5) +
+   geom_text(stat = "stratum", size = 3) +
+   theme(legend.position = "none") +
+   ggtitle("vaccination survey responses at three points in time")

效果图如下

轻松实现用柱子中分类变量的属性来映射连线的颜色,使得图片更加的美观。

·end·

文章分享自微信公众号:
生信修炼手册

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:lzyg
原始发表时间:2022-05-23
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 桑基图

    R语言里面主要用networkD3包的sankeynetwork()函数. 主要参数为:

    生信编程日常
  • ggalluvial绘制桑基图

    桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、...

    作图丫
  • 流量结构分布图——桑基图(Sankey)

    桑基图作为相对复杂的图表种类,平时很少用到,不仅仅是因为它的引用场景相对狭窄,另一方面则是制作难度相对较大,门槛较高。 不过针对第一个问题,如果你能很好地理解自...

    数据小磨坊
  • Python 绘制惊艳的桑基图

    很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况。例如,以居民如何从一个国家迁移到另一个国家为例。这里演示了有多少居民从英格兰迁移到北爱尔兰、苏格兰...

    数据STUDIO
  • pyecharts-9-绘制桑基图

    本文详解地介绍了如何制作桑基图,使用的可视化库是强大的Pyecharts(版本1.7.1,版本一致很重要)。文章将从如下几个方面进行介绍:

    皮大大
  • R语言实现桑基图绘制

    以上包中ggalluvial,networkD3,riverplot三个均可构建桑基图,当然从简单到复杂就是networkD3->ggalluvial->riv...

    一粒沙
  • 展示细胞比例变化之桑基图

    当时我展现这一现象使用的可视化方法就是balloonplot函数啦,它来自于gplots这个包!而且我还创造了一个模拟数据,如下所示;

    生信技能树
  • ECharts绘图解决方案——流动关系图(桑基图)

    | 导语 基于实际业务场景使用ECharts的经验,总结一些通用的解决方案。 应用场景 用流动关系图来映射品牌之间的有效换机数量,从而帮助运营对手机品牌的行情...

    腾讯大讲堂
  • 「R」数据可视化17:桑基图

    文献里的桑基图:展示了克罗恩病患者的菌群变化 图片来源:https://www.biorxiv.org/content/10.1101/772483v1.ful...

    王诗翔呀
  • 轻轻松松绘制桑基图

    好吧,我们开始提笔绘制走起,绘制桑基图工具包还挺多,不仅从最高端的JS库(D3、Ecgarts、highlight)到主流的数据科学编程工具(R、Python等...

    百味科研芝士
  • 使用R语言创建自定义桑基图Sankey图

    本文将描述如何在R中创建自定义Sankey图。我将首先解释Sankey图的基础,然后提供自动创建和手动控制的布局的示例。

    拓端
  • 实现绘制Sankey桑基图(河流图、分流图)流程数据可视化

    我一直在寻找一种直观的方法来绘制流程中状态之间的流程或连接。R软件恰好满足了我的需求。

    拓端
  • 好看的桑基图是如何炼成的!

    Sankey Diagram, 也叫做桑基图,是一种展示数据流的可视化方式,一张典型的桑基图示例如下

    生信修炼手册
  • network3D: 交互式桑基图

    桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、...

    生信宝典
  • 线框图?原型图?为何傻傻分不清楚

    首先,我们需要搞清楚的一点就是线框图不是真正意义上的原型。许多设计师和产品经理,甚至是经验丰富的设计大牛往往也很容易混肴这些专业术语。什么是线框图?什么是原型...

    奔跑的小鹿
  • 线框图?原型图?为何傻傻分不清楚

    首先,我们需要搞清楚的一点就是线框图不是真正意义上的原型。许多设计师和产品经理,甚至是经验丰富的设计大牛往往也很容易混肴这些专业术语。什么是线框图?什么是原型...

    奔跑的小鹿
  • 桑基图在单细胞数据探索中的应用

    桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,比较适用于用户流...

    生信技能树jimmy
  • ggalluvial|炫酷桑基图(Sankey),你也可以秀

    本文使用TCGA数据集中的LIHC的临床数据进行展示,大家可以根据数据格式处理自己的临床数据。也可后台回复“R-桑基图”获得示例数据以及R代码。

    西游东行
  • pyecharts实现多节点、长路径的sankey桑基图

    pyecharts︱交互式pyecharts的相关使用教程 简单的用pyecharts实现超多节点、较长路径的桑基图,一个样图:

    悟乙己

扫码关注腾讯云开发者

领取腾讯云代金券