桑基图作为相对复杂的图表种类,平时很少用到,不仅仅是因为它的引用场景相对狭窄,另一方面则是制作难度相对较大,门槛较高。

不过针对第一个问题,如果你能很好地理解自己所涉及到的业务数据结构及想要表达和呈现的维度信息,那么关键时刻使用桑基图确实会让你的报告锦上添花。

桑基图用于表达流量分布于结构对比,最初的发明者使用它来呈现能量的流动与分布。

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

因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。

桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。

现如今的可视化软件行业如此发达,制作此类桑基图已绝非难事,从最高端的JS库(D3、Ecgarts、highlight)到主流的数据科学编程工具(R、Python等)亦或者人人都能上手的自助式BI工具(PowerBI、Tableau等)都可以胜任此项工作。

本文将着重分享使用R语言中的d3network工具包以及PowerBI可视化工具来制作桑基图的大致过程(Tableau的桑基图还是太繁琐,这里不再展示,感兴趣可以自己探索)。

R中有两个包有现成的桑基图函数:

Networkd3、d3Network,包名大同小异,而且函数的参数都是一样的,很怀疑是不是同一批人搞的。

桑基图的数据结构很简单,只有三列数据信息:起点:

终点:

权重:

虽然只有三列数据,但是桑基图可以做出多级节点,在数据整合上,我们需要事前现将所有节点对应的起点、终点和权重值都顺序的纵向合并为三列字段。

第一个图是我们要呈现的原始数据,这样看来有两组对应关系,即大区对应地区、地区对应省份,我们如果要呈现这两组信息,只筛选出大区与地区对应关系及其权重值、地区与省份对应关系及其权重值,并将两组三变量数据表进行列对齐合并。(说的有点绕了,其实就是图表上有多少节点对,那么数据就有多少个三变量观测值)。

以下是R语言代码的实现过程:library(Networkd3)

library("d3Network")

library(xlsx)

setwd("D:/R/File/")

Sankey

Sankeylinks

Sankeynodes

Sankeynodes$index

Sankeylinks

Sankeylinks

Sankeydata

Sankeyname

使用d3Network包中的桑基图函数实现:

d3Sankey(Links=Sankeydata,Nodes=Sankeyname,Source="Source",Target="Target",Value="Value",NodeID="name",

fontsize=12,nodeWidth=30,file="TestSankey.html")

遗憾的是该包对中文支持不够友好~

#------------------------------------------

使用Networkd3包里面的桑基图函数实现:

sankeyNetwork(Links=Sankeydata,Nodes=Sankeyname, Source ="Source",

Target = "Target", Value = "Value", NodeID = "name",

units = "TWh", fontSize = 12, nodeWidth = 30)

这次出来的结果还是挺满意的:

以上两种方式做出来的动态图表(调用了D3的在线图形库,格式是html格式的,如果你需要将HTML嵌入PPT中使用,那么本公众号早前曾经推送过一篇此类文章,讲解如何在PPT中嵌入HTML对象)。将html格式动态图表网页嵌入ppt中

PowerBI版讲解:

接下来讲解如何在PowerBI中实现以上桑基图效果,因为改图表并未包含在PowerBI的内置基础图表库中,所以我们需要在他的在线社区中下载该图表的可视化插件。Custom visuals for Power BI

关于如何下载PowerBI图形可视化插件,如何导入、加载和使用,此前的另一篇文章中也介绍的很详细。当PowerBI遇到R语言

然后导入你的桑基图数据源:

拖入对应字段:(仍然是三个字段,起点,终点,权重)

保存本地文件,并发布到PowerBI的云空间:

如果你还没有申请PowerBI的账户,那么最好去他的平台申请一个(提示需要使用教育邮箱或者工作邮箱,即.com\.edu结尾的)。

发布成功之后,你的PowerBI控件中就存在此图表对象,以后你更新本地的那个PowerBI文件的时候,只需点击发布,空间中的对象也会同步更新。

然后打开你的PPT(需13及16版以上才可以)的应用商店内找到PowerBIFile插件。

点击添加,输入之前申请的账号密码,就会出现你的已存储的仪表盘对象,点击对应的桑基图对象,就可以完成导入。

导入后的桑基图无论是在PPT的编辑状态还是PPT的放映状态都可以保留所有的动态效果。(这就是微软的PowerBI与office平台对接后带来的强大优势,非常适合作为大屏幕交互演示来蹭亮点)

最后好像再强调一遍,Sankey是特定场景下呈现流量关系与结构对比所使用的,不要觉得这种图表很炫酷就各种乱用,数据可视化的要义很重要的一条就是,不可乱用图表,适当的场景使用合适的图表。

联系方式:

wechat:ljty1991

Mail:578708965@qq.com

个人公众号:数据小魔方(datamofang)

团队公众号:EasyCharts

qq交流群:[魔方学院]553270834

R语言多层桑基图_流量结构分布图——桑基图(Sankey)相关推荐

  1. python 桑基图_流量结构分布图——桑基图(Sankey)

    原标题:流量结构分布图--桑基图(Sankey) 桑基图作为相对复杂的图表种类,平时很少用到,不仅仅是因为它的引用场景相对狭窄,另一方面则是制作难度相对较大,门槛较高. 不过针对第一个问题,如果你能很 ...

  2. R语言使用ggpubr包的ggarrange函数组合多张结论图(水平并排组合)

    R语言使用ggpubr包的ggarrange函数组合多张结论图(水平并排组合) 目录 R语言使用ggpubr包的ggarrange函数组合结论多张结论图(水平并排组合)

  3. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置 ...

  4. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...

  5. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战

  6. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置、色彩设置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置.色彩设置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜 ...

  7. R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题、轴标签设置)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 #仿真数据

  8. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状、颜色)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状.颜色)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的 ...

  9. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...

最新文章

  1. Web ReplayType?
  2. 疫情冬天过去,二手经济春天到来
  3. 简单了解各种序列化技术-Avro序列化
  4. oracle 并行执行 杀掉会话,oracle – 为什么即使我禁用并行DML和并行DDL也会创建并行会话...
  5. java取模多位数_JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)...
  6. 井下关于风速的规定_矿井有害气体最高允许浓度、温度、风速的规定
  7. 局域网只看到少数电脑_利用局域网高速传输大文件的两种方法
  8. 关于注册中心的CAP定理。
  9. 自驾游开什么车最靠谱?
  10. 昨天1024程序员节,我故意写了个死循环~
  11. 线性定常系统参数辨识-(数学建模与系统辨识——NJUST)
  12. 天津智慧路灯+“新基建”示范区建设启动、沪苏通长江公铁大桥
  13. 关于微信公众号运营你要知道的24件小事
  14. #12304;#28404;#28404;#37329;#34701;#23458;#26381;#30005;#35805;#12305;
  15. 关于示波器探头的输入容抗问题解决
  16. QEMU(3) 参数解析
  17. 数据库审计系统在加密传输场景下的应用(SinoDB)
  18. L1-064 估值一亿的AI核心代码(C++)
  19. Scrapy爬取饿了么周围商家信息
  20. 用html做一个旅游网首页

热门文章

  1. 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结
  2. babyos2(30) APIC, local APIC, I/O APIC
  3. 语音唤醒的具体技术方案
  4. jQuery悬浮菜单
  5. ccs C语言编译器,CCS C 编译器手册2010.pdf
  6. 如何合并磁盘分区 windows7调整分区大小方法
  7. android室内定位传感器辅助pdr jar,基于PDR辅助的视觉室内定位算法的研究
  8. 解决vps上的ssh掉线------tmux
  9. vue+elementui表格前端导出excel以及自定义导出样式
  10. Spine 实用技巧大全