原标题:流量结构分布图——桑基图(Sankey)

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

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

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

百度百科给了桑基图相对完善的解释:

桑基图(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对象)。

http://mp.weixin.qq.com/s/_mDogi4G6LRTRiaAZIWaRw

PowerBI版讲解:

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

https://store.office.com/en-us/appshome.aspx?productgroup=PowerBI

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

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

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

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

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

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

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

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

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

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

数据源会分享在魔方学院QQ群中:

欢迎关注魔方学院QQ群返回搜狐,查看更多

责任编辑:

python 桑基图_流量结构分布图——桑基图(Sankey)相关推荐

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

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

  2. python态密度曲线绘制_使用Multiwfn绘制态密度(DOS)图考察电子结构

    使用Multiwfn绘制态密度(DOS)图考察电子结构 文/Sobereva@北京科音 First release: 2019-May-14  Last update: 2020-Nov-17 0 前 ...

  3. python天气查询小程序加背景图_微信小程序开发背景图显示功能

    这两天开发微信小程序,在设置背景图片时,发现在wxss里面设置background-image:(url) 属性,不管是开发工具还是线上都无法显示.经过查资料发现,background-image只能 ...

  4. echart关系树状图_干货 | 25个常用Matplotlib图的Python代码

    50个Matplotlib图的汇编,在数据分析和可视化中最有用.此列表允许您使用Python的Matplotlib和Seaborn库选择要显示的可视化对象. 1.关联 散点图 带边界的气泡图 带线性回 ...

  5. python seo快排_流量贩子GoGo闯:SEO黑帽点击快排发包+Python应用软件编程技术 (含工具)...

    01.SEO_域名 1.SEO_域名.mp4 老域名.pdf 域名.html 域名.md 02.SEO_内容&模板 内容 & 模板.pdf 内容.模板_采集内容处理.mp4 内容.模板 ...

  6. 重定义 不同的基类型_镍及铁镍基耐蚀合金高温合金哈氏合金镍基合金之第一篇概述...

    纯镍是一种重要的应用于工业的原材料,它除具有良好 的强度.塑韧性外,在卤族元素及其氢化物活泼性气体.苛 性介质.不含氧和氧化剂的还原性酸介质中还具有良好的耐 蚀性,因此纯镍作为耐蚀金属材料得到广泛应用 ...

  7. r语言绘制雷达图_用r绘制雷达蜘蛛图

    r语言绘制雷达图 I've tried several different types of NBA analytical articles within my readership who are ...

  8. 小强升职记思维导图_你学会用 “思维导图” 学英语了吗?

    今天我们来讲讲目前比较火爆的"思维导图学习法".思维导图又叫"MIND MAP",是英国人托尼博赞发明的一种思维工具. 托尼博赞本人在心理学.语言学.数学以及科 ...

  9. java 性能 火焰图_性能调优工具-火焰图

    性能调优工具-火焰图 发布时间:2019-07-17 19:29, 浏览次数:402 前言 工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快 ...

最新文章

  1. php利用mysql扩展库向数据库插入数据的步骤与案例
  2. 360安全卫士 导致MySQL 5.0.24 自动关闭
  3. Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true
  4. collections 使用教程
  5. python操作注册表能干啥_转 python操作注册表模块_winreg
  6. 解决PowerPoint英语课件配音难同步的问题
  7. Flask jQuery ajax
  8. linux后台执行shell脚本
  9. C++中include头文件使用与的区别
  10. 数据分析 -- 流程
  11. 浙大计算机学院陈越老师,浙江大学计算机科学与技术学院导师介绍 陈越
  12. 掌握 需求过程阅读笔记02
  13. Ladon8.9扫描器简明教程/用法例子
  14. 【解决】简单有效的使用lodop打印小票功能
  15. 方舟服务器商店系统怎么弄,方舟生存进化怎么设置商店系统
  16. 基于Simswap的视频换脸
  17. 微信小程序页面跳转,url传参参数丢失问题
  18. Centos配置CA(证书颁发机构)
  19. JSP-简单的练习省略显示长字符串
  20. 边缘态半无穷格林函数谱函数计算

热门文章

  1. 什么是开关量,I/O区分详细解答
  2. 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信
  3. 如何看待力扣(LeetCode)经典会员
  4. 写个厦门市健身徒步爬山线路的web静态页面
  5. 训练集损失值loss、测试集val_loss、验证集loss相关问题总结
  6. PySide6开发环境
  7. 学习笔记——SDRAM学习
  8. 华为ensp ospf综合实验
  9. 正负数原码、反码、补码以及位运算
  10. C语言调用jni中JNIEnv指针使用和理解