教你用pyecharts制作交互式桑基图,赶快学起来吧!

640?wx_fmt=jpeg

点击右侧关注,遇见更好的自己!

点击右侧关注,遇见更好的自己!

作者:朱卫军
来源:Python大数据分析

教你用pyecharts制作交互式桑基图,
赶快学起来吧!

由于工作的需要,经常需要进行可视化展示,除了一些常用的BI工具,我也会使用python对数据进行可视化。

python的第三方可视化库有很多,比如matplotlib、seaborn、plotly、bokeh、pyecharts等等。

这次就来说一说,如何用python的第三方库-pyecharts制作交互式桑基图。

640?wx_fmt=png

示例

1 什么是桑基图?
桑基图是可视化图表的一种,一般用来表示数据流量。

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

桑基图主要由边、流量和支点组成,其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。边的宽度与流量成比例地显示,边越宽,数值越大。   640?wx_fmt=jpeg
举个例子,假如我记录了自己一段时间的消费金额,并且分门别类列出清单:
640?wx_fmt=png

数据展示不足以一目了然地看出哪类消费多、哪类消费少,如果把它做成桑基图,就可以很完美地展现消费特征:

640?wx_fmt=png
静图

640?wx_fmt=gif

可交互

2 什么是pyecharts?
大部分人可能听过echarts,它是百度旗下用于可视化设计的开源项目,而pyecharts则将echarts和python结合,方便在python中调用echarts接口,直接生成可视化图表。
官方对pyecharts特性的描述:

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

pyecharts安装过程很简单,用pip安装即可,在命令行输入:
pip install pyecharts
你只需要简单的代码就可以生成图表:
from pyecharts.charts import Bar	

	
bar = Bar()	
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])	
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])	
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件	
# 也可以传入路径参数,如 bar.render("mycharts.html")	
bar.render()
640?wx_fmt=png
3 使用pyecharts制作桑基图

前面我们展示了一张生活开支交互式桑基图:

640?wx_fmt=gif

下面就来用pyecharts实现它

桑基图在pyecharts中通过Sankey方法实现,它接受两个外部输入。
一个是所有类别的集合-nodes,一个是子类、父类、数据的三方集合-links。
这两个都是以json数据格式传入,最后以html形式输出图表。

nodes
640?wx_fmt=png
links:
640?wx_fmt=png

也就是说,首先你要把数据转换成Sankey可以接受的形式。

第一步:数据准备
我们已经有这样的数据表:
640?wx_fmt=png
对数据进行整理,我的做法是先初步整理成:子类-父类-数据,以这样的数据形式保存在csv中:
640?wx_fmt=png

接着,写个简单转换代码,将上面数据转换成nodes和links:
# 导入相关库	
import pandas as pd	
from pyecharts.charts import Page, Sankey	
from pyecharts import options as opts	

	
# 读取csv文件	
data = pd.read_csv(r'sample.csv',encoding='gbk',header=None)	

	
# 生成nodes	
nodes = []	
nodes.append({'name':'总支出'})	
for i in data[0].unique():	
    dic = {}	
    dic['name'] = i	
    nodes.append(dic)	

	
# 生成links	
links = []	
for i in data.values:	
    dic = {}	
    dic['source'] = i[0]	
    dic['target'] = i[1]	
    dic['value'] = i[2]	
    links.append(dic)

第二步:生成可视化结果
准备好nodes和links后,就可以调用Sankey函数
# pyecharts 所有方法均支持链式调用。	
c = (	
        Sankey()	
        .add(	
"费用/元",	
            nodes,	
            links,	
            linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source",type_="dotted"),	
            label_opts=opts.LabelOpts(position="right",),	
        )	
        .set_global_opts(title_opts=opts.TitleOpts(title="我的生活支出一览"))	
    )	
# 输出html可视化结果	
c.render('result.html')
你可以通过配置项otps来设置图表的颜色、标签、标题等信息,具体细节可以去官网查询,这里不做赘述。
官网链接:https://pyecharts.org

第三步:打开html文
生成html文件后,直接通过浏览器打开即可,就可以看到能交互的桑吉图了
640?wx_fmt=gif
4 结论

本文介绍了如何使用pyecharts在python中制作交互式桑基图,希望能给大家的可视化提供帮助!

-------------------End-------------------

640?wx_fmt=jpeg

 「Python数据之道 」建立了读者交流群,大家可以添加管理员微信进行加群

扫描添加好友

回复 “资源

转发和分享是更好的支持!
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值