京公网安备 11010802034615号
经营许可证编号:京B2-20210330
大家好,我是小z~
最近,不止一次收到群里小伙伴的截图追问:
“这个图叫什么???”
“这个图真好看!!!怎么画啊?”
小z本没有干货,问的人多了,也便有了干货。
此图姓桑名基,平素不喜露面。奈何天生丽质,偶有露面,必引众人围观。
时人有云:“桑基桑基,高贵美丽!”
1
据小z不严谨的抽样提问统计,90%想学习桑基图的旁友,都是被她妖艳炫酷的外表所吸引。
而桑基图真正代表了什么?和类似图表相比的独特性是什么?却几乎无人问津。
害!人真的是视觉动物!
言归正传,我们来看看百科的官方解释:
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的"蒸汽机的能源效率图"而闻名,此后便以其名字命名为"桑基图"。
Emmm,有点内个意思了,结合其他资料,做进一步的汇总提炼:
文字太苍白,下面我们用Python来绘制一个具体的实例~
2
动手之前,我们再次敲黑板,回顾桑基图组成要素的重点——节点、边和流量。
任何桑基图,无论展现形式如何夸张,色彩如何艳丽,动效如何炫酷,本质都逃不出上述3点。
只要我们定义好上述3个要素,Python的pyecharts库能够轻松实现桑基图的绘制。
这里我们用“当代青年熬夜原因分析”数据为例:
数据来源:这个数据是小z近两周卖炒粉时口头做的调研
很规整的性别、熬夜原因、人数三列数据。
不过,要用pyecharts来画图,得入乡随俗,按照它定的规则来规整数据源。
首先是节点,这一步需要把所有涉及到的节点去重规整在一起。也就是要把性别一列的“男”、“女”和熬夜原因一列的“打游戏”、“加班”、“看剧”以列表内嵌套字典的形式去重汇总:
接着,定义边和流量,数据从哪里流向哪里,流量(值)是多少,循环+字典依然可以轻松搞定:
source-target-value的字典格式,很清晰的描述了数据的流转情况。
这两块数据准备完毕,桑基图已经完成了80%,剩下的20%,只是固定格式的绘图代码:
from pyecharts.charts import Sankeyfrom pyecharts import options as optspic = ( Sankey() .add('', #图例名称 nodes, #传入节点数据 linkes, #传入边和流量数据 #设置透明度、弯曲度、颜色 linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"), #标签显示位置 label_opts=opts.LabelOpts(position="right"), #节点之前的距离 node_gap = 30, ) .set_global_opts(title_opts=opts.TitleOpts(title = '熬夜原因桑基图')))pic.render('test.html')
一个回车下去,看看成果:
果然,男打游戏女看剧,加班熬夜是儿戏。
如果想要垂直显示,只需要在add函数里面加一个orient="vertical"就好:
pic = ( Sankey() .add('', nodes, linkes, linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = "source"), label_opts=opts.LabelOpts(position="top"), node_gap = 30, orient="vertical", #更改的是这里 ) .set_global_opts(title_opts=opts.TitleOpts(title = '熬夜原因细分桑基图')))pic.render('test2.html')
OK!不过,还有同学意犹未尽,这个是涉及到两层的流转,那如果三层,需要怎么画呢?
不慌,先导入(狗粮)数据:
这是某宠物品牌,3月份主要产品购买路径(第一次和第二次)的数据,先是品类,其次是第一次购买的产品类型,接着是第二次购买的产品类型,最后一列对应人数。
注:这里第一次购买的产品前面加了“1-”,第二次购买加了“2-”的区分标识。
画图必备的nodes节点实现很简单,所有节点(品类、第一次购买、第二次购买)做去重汇总,对上面生成nodes代码稍作调整就可以:
而linkes只接受source-traget-value的格式,得先对源数据进行格式调整,分别形成“品类-第一次购买-人数”,“第一次购买-第二次购买-人数”的样式,再统一汇总:
规整汇总好之后,只需要复用上面的linkes代码:
画图代码几乎没变,只是改了个标题:
pic = ( Sankey() .add('', nodes, linkes, linestyle_opt=opts.LineStyleOpts(opacity = 0.3, curve = 0.5, color = 'source'), label_opts=opts.LabelOpts(position = 'top'), node_gap = 30, ) .set_global_opts(title_opts=opts.TitleOpts(title = '客户购买路径流转图')))pic.render('test3.html')
大功告成,So easy!无论是多少层数据的流转,只要定义好nodes和linkes,就能以不变应万变。
最后,通过上面的桑基图,我们能够非常直观的洞察到客户购买流转规律:
原本死板的数据,在桑基的装扮之下,变得楚楚动人。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
先回答:下半年能考的证书,大致分四类 2026年下半年仍有报名或考试安排的证书,主要集中在四个方向:财会金融类(如注册会计师 ...
2026-10-27毕业后该考什么证书,答案不是一张热门榜单,而是一个顺序问题:先确定你要投的岗位方向,再判断哪些证书现在就能报、哪些要等工 ...
2026-10-2734岁考证,和二十多岁刚毕业时不是同一道题。这个年龄找工作,招聘方通常已经默认你有十年上下的工作积累,会拿“经验能不能直接 ...
2026-10-27咨询岗位最该优先掌握的不是某个工具,而是四类能串起项目全流程的能力:问题定义与结构化拆解、指标与对比分析、数据获取与清洗 ...
2026-10-27多数咨询岗位需要一定程度的数据分析能力,但“需要”不等于“必须会写代码或建模型”。咨询顾问至少要能看懂客户给的数据、把业 ...
2026-10-27咨询岗位的分析能力,不是“会套框架”或“PPT写得漂亮”,而是一条从问题到结论的能力链:问题拆解—假设验证—信息获取—数据 ...
2026-10-27需要,而且它不是“加分项”,是日常工作的基本工具。直播运营每天要面对选品排期、流量承接、转化复盘和投流决策,这些任务的结 ...
2026-10-27证券分析师的培训需求,最好从“最终要交什么”往回推。日常输出大致四类:行业跟踪报告、财报拆解与盈利预测、估值模型、路演与 ...
2026-10-27先给答案:一张四层知识地图 如果只用一句话回答“证券分析师最重要的知识是什么”,答案是:以财务分析和估值建模为硬核,以行 ...
2026-10-27市场策划不是“会写文案、能办活动”这么简单。招聘方真正考察的,是你能否围绕一个业务目标,完成从调研、人群判断、创意主题、 ...
2026-10-27市场运营想靠学习推动职业发展,容易掉进两个坑:一是把课程清单当能力清单,学完不知道用在哪;二是只补营销方法,遇到渠道效果 ...
2026-10-27产品运营做久了,很容易陷入一种忙碌:活动一场接一场,功能推了一版又一版,日报周报天天写,但说不清自己到底积累了什么。想提 ...
2026-10-27运营岗的“快速提升”,不是把Excel、SQL、Python挨个学一遍,而是先补上能立刻改变工作产出的能力。判断标准很直接:同样一场活 ...
2026-10-27优秀市场专员的能力不是单点技能堆出来的,而是“用户洞察—内容与活动策划—渠道获客—数据复盘”四块形成闭环。想快速上手,正 ...
2026-10-27运营专员的“通用知识”,不是一份越长越好的工具清单,而是能支撑日常任务判断的一套底盘。不同细分方向差异很大:用户运营更关 ...
2026-10-27运营专员最常见的困境不是不忙,而是忙完之后说不清效果:活动做了、内容发了、社群拉了人,汇报时却只有“曝光多少、入群多少” ...
2026-10-27运营经理提升职业知识,靠的不是多报几门课,而是先有一张自己的“知识地图”,再按当前岗位最卡壳的环节排顺序。比较实用的做法 ...
2026-10-27运营岗位的能力素质提升,核心不是把工具学一遍,而是围绕“目标拆解—用户洞察—执行落地—数据复盘”四层能力逐层补齐。工具是 ...
2026-10-27运营岗位的能力提升,最容易走成两条弯路:一是把“提升”等同于学工具,Excel、SQL、Python挨个报班,回到工作里还是凭经验拍脑 ...
2026-10-27运营岗最容易陷入的学习误区,是把“提升”等同于收藏平台玩法、追热点模板、背活动话术。这些内容有用,但迁移性差:换个行业、 ...
2026-10-27