桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融、生物信息等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。

前两天正好碰到了这类“数据流量”的可视化问题,因此花了点时间学习了一下桑基图的画法,比较简单,在这里给大家演示一下:

我自己编了一个数据,如下图所示

左边是数据的流向,右边是用表格的形式重写,左图的每一个箭头对应右图的每一行,画桑基图时用到的数据就是右边格式的表格。

下面就是代码

library(networkD3)
library(tidyverse)
library(RColorBrewer)#读取刚才的数据框,给列命名
df=read.table("test.txt",header = F,sep = "\t",stringsAsFactors = F)
colnames(df)=c("source","target","value")#图形中的所有节点
df.nodes <- data.frame(name=c(as.character(df$source), as.character(df$target)) %>% unique()
)#将source和target重新编号
df$IDsource <- match(df$source, df.nodes$name)-1
df$IDtarget <- match(df$target, df.nodes$name)-1#这一步是为了给flow自定义颜色,单独定义了一列
df$group="flow"#配置颜色部分,形式相对固定,不必纠结具体的语法规则
#编码对应的颜色可以用RColorBrewer包结合scales包查看
my_color <- 'd3.scaleOrdinal() .domain(["A", "B", "C", "D", "E", "F", "G", "H", "I", "J","flow"]) .range(["#8DD3C7", "#FFFFB3", "#BEBADA", "#FB8072", "#80B1D3", "#FDB462", "#B3DE69", "#FCCDE5",  "#BC80BD", "#CCEBC5","#BDBDBD"])'#画图
Sankey.p <- sankeyNetwork(Links = df, Nodes = df.nodes,Source = "IDsource", Target = "IDtarget",Value = "value", NodeID = "name", LinkGroup = "group",colourScale=my_color, sinksRight=FALSE, nodeWidth=25, nodePadding=10, fontSize=13,width=900)
Sankey.p
#画出来的图形,还可以直接在R窗口中调整方块上下位置,不过还是建议保存为pdf后用AI调整
#nodeWidth每个节点方块的宽度
#nodePadding每一列节点方块之间在纵向上的间隔
#width是图形横向的宽度#保存为pdf
library(htmlwidgets)
saveWidget(Sankey.p, file="Sankey.html")
library(webshot)
webshot("Sankey.html", "Sankey.pdf")

最后的效果是这样的,嗯…还需调整


公众号后台回复20210325,获取今天的代码和测试数据

因水平有限,有错误的地方,欢迎批评指正!

R绘图(5): 一文学会桑基图的画法相关推荐

  1. R语言多层桑基图_桑基图的绘制核心微生物组分类学及丰度展示

    为什么要用桑基图 桑基图 (Sankey diagram)是一种展现数据之间流动和相互关系的图像,类似于一种网络图,通过不同层级节点之间的连接以及连接边的宽度,展示数据之间的流动关系. 在微生物群落分 ...

  2. r语言 转录本结构及丰度_桑基图的绘制核心微生物组分类学及丰度展示

    为什么要用桑基图 桑基图 (Sankey diagram)是一种展现数据之间流动和相互关系的图像,类似于一种网络图,通过不同层级节点之间的连接以及连接边的宽度,展示数据之间的流动关系. 在微生物群落分 ...

  3. R语言多层桑基图_流量结构分布图——桑基图(Sankey)

    桑基图作为相对复杂的图表种类,平时很少用到,不仅仅是因为它的引用场景相对狭窄,另一方面则是制作难度相对较大,门槛较高. 不过针对第一个问题,如果你能很好地理解自己所涉及到的业务数据结构及想要表达和呈现 ...

  4. R语言多层桑基图_绘制炫酷桑基图,R语言(networkD3包)能搞定?

    你知道如何使用R语言绘制桑基图吗? 小锐当然知道啦,并且教你 绘制酷炫的桑基图. 开课啦 桑基图(Sankey)是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,其最明显的特征就是,始末 ...

  5. 使用R画桑基图(流程图)

    桑基图可以用来表示各个节点之间转换 在R中可以直接定义点点之间的关系后使用相应的package画桑基图: 方法一:   library(riverplot) # 构造连接节点的数据框 edges =  ...

  6. R语言多层桑基图_R语言可视化(二十三):桑基图绘制

    23. 桑基图绘制 清除当前环境中的变量 rm(list=ls()) 设置工作目录 setwd("C:/Users/Dell/Desktop/R_Plots/23sankey/") ...

  7. R语言多层桑基图_R语言轻松搞定用户路径桑基图

    用户路径分析,在互联网产品用户分析中是经常用到的,而使用最多的就是桑基图. 来自百度百科的定义:桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图, ...

  8. R语言多层桑基图_ceRNA关系网络冲击图—桑基图(R语言绘制)

    原标题:ceRNA关系网络冲击图-桑基图(R语言绘制) 在ceRNA相关的研究中,例如circRNA-miRNA-mRNA,或者lncRNA-miRNA-mRNA的靶向关系图谱,一般通过网络图呈现.首 ...

  9. R画图实战之——桑基图

    之所以会想到写关于桑基图的内容是因为最近工作需要,研究了下桑基图,发现网络上和桑基图相关的真实可用的资料少之又少,所以决定出这篇博客,讲讲如何用R语言绘制桑基图. 什么是桑基图? 它是一种特定类型的流 ...

最新文章

  1. sqlplus连接时出现错误:shared memory realm does not exist 解决
  2. Java学习总结:31(StringBuffer类)
  3. Python数据分析可以应用到哪些领域
  4. php 伪静态有什么用,网站为什么要做伪静态,做伪静态的好处是什么?
  5. 虚拟机添加串口设备方法
  6. 最大连续子矩阵和算法
  7. python实现英文新闻摘要自动提取_Automotive Innovation摘要集系列2:Intelligent and Connected Vehicles...
  8. python中sorted()函数的用法_Python中的Sorted()函数
  9. 线程池ThreadPoolExcutor的使用
  10. ICT通信运营企业的重建之服务升级(二)----ICT技术及产品种类
  11. OpenWrt自定义luci页面来修改配置文件
  12. ppt转图片(支持动画帧的转换)
  13. (计算圓柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积
  14. 多元线性回归模型预测房价
  15. 从东南大学906被刷到调剂过程(内含个人感想)
  16. 人工智能技术应用的领域主要有哪些?
  17. mps是什么意思 计算机网络,网络连接的半双工和全双工是啥意思 100MPS和10MPS又有啥区别...
  18. 《开源安全运维平台-OSSIM最佳实践》于2016年1月出版
  19. 2033-人见人爱A+B(java)
  20. Android实现自动点击 - 无障碍服务

热门文章

  1. 象棋ai算法(极小-极大值搜索、负极大值函数、Alpha-Beta剪枝算法、渴望算法)
  2. CentOS下搭建Zookeeper集群
  3. 王者荣耀s18服务器维护中,王者荣耀:S18开启仅20天,三大数值怪引发众怒,天美也束手无策...
  4. Ubuntu卸装原生libreoffice应用,安装高端的wps-office
  5. STM32 控制LED灯
  6. 不会绘画可不可以学习3D建模?
  7. 零日漏洞指什么?如何有效应对?
  8. WEB开发常用集成环境
  9. python计算狗的年龄_如何判断狗的年龄?
  10. mysql int类型需要指定长度_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...