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

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

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

示例

什么是桑基图?

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

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

桑基图主要由边、流量和支点组成,其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。边的宽度与流量成比例地显示,边越宽,数值越大。

举个例子,假如我记录了自己一段时间的消费金额,并且分门别类列出清单:

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

静图
可交互

什么是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 Barbar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()

使用pyecharts制作桑基图

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

下面就来用pyecharts实现它

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

nodes

links:

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

第一步:数据准备

我们已经有这样的数据表:

对数据进行整理,我的做法是先初步整理成:子类-父类-数据,以这样的数据形式保存在csv中:

接着,写个简单转换代码,将上面数据转换成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'] = inodes.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文件后,直接通过浏览器打开即可,就可以看到能交互的桑吉图了

结论

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

设计桑基图_教你用pyecharts制作交互式桑基图,赶快学起来吧!相关推荐

  1. python软件设计背景_教你用Python制作微信好友背景墙

    目录: 0 引言 1 环境 2 代码实现 3 后记 0 引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这 ...

  2. matlab箱形图_使用javascript可视化世界幸福来构建箱形图

    matlab箱形图 Data visualization is an important and sometimes undervalued tool in a data scientist's to ...

  3. 手把手教你用 pyecharts 制作日历图

    公众号后台回复"图书",了解更多号主新书内容 作者:林骥 来源:林骥 日历图,是指按照日历的布局,用颜色展现每一天的数据,从而比较直观地看到全年的数据情况. 比如说,下面是一家超市 ...

  4. pyecharts绘制地铁图_为父亲做张十年后的地铁图

    父亲天生有点晕车.所以比较喜欢地铁.他习惯坐地铁到很远的地方看看. 但随着深圳地铁一直在扩展,线路图不断变化,站点之间也不是真实的距离,年纪大的父亲就有点看不懂了. 比如红树湾和红树湾南站在图上不是南 ...

  5. 直方图 帕累托图_工具讲解 | 用Excel绘制帕累托图

    帕累托图又叫排列图.主次图,是按照发生频率大小顺序绘制的直方图,表示有多少结果是由已确认类型或范畴的原因所造成.它是将出现的质量问题和质量改进项目按照重要程度依次排列而采用的一种图表.可以用来分析质量 ...

  6. powerdesigner画关系图_「俯首甘为孺子牛」李可染牧牛图赏析

    李可染,中国近代杰出的画家.诗人,画家齐白石的弟子.李可染自幼即喜绘画,13岁时学画山水.43岁任中央美术学院教授,49岁为变革山水画,行程数万里旅行写生.72岁任中国美术家协会副主席.中国画研究院院 ...

  7. 相关性分析热点图_高分文章中物种与代谢物相关性热图是怎么画的?

    测序行业的蓬勃发展,带来微生物组学日新月异的变化.目前,单一组学的文章不断"贬值",前沿研究的目光从单一组学逐步拓展至多组学对贯穿分析,即结合多个组学的分析角度,从多个层面阐述生物 ...

  8. Python数据可视化 Pyecharts 制作 Overlap 层叠多图

    Python3 的 Pyecharts 制作 Overlap(层叠多图) 时需要使用的设置参数和常用模板案例,可根据实际情况对案例中的内容进行调整即可. 文章目录 Demo 折线柱状组合图 折线散点组 ...

  9. Python数据可视化 Pyecharts 制作 Page 顺序多图

    Python3 的 Pyecharts 制作 Page(顺序多图) 时需要使用的设置参数和常用模板案例,可根据实际情况对案例中的内容进行调整即可. 文章目录 Demo 标准顺序Page图 Page:顺 ...

最新文章

  1. 毕业2年从月薪400到6000 继续网络梦
  2. golang 并发与并行学习笔记(二)
  3. 成功解决Python的Reshape your data either using array.reshape(-1, 1) if your data has a single feature or
  4. 设计模式-依赖倒置-Dependency Inversion Principle
  5. inter Course Certificate
  6. Failed to load sql modules into the database cluster during PostgreSQL Installation
  7. 研究:多感官教学增强记忆 学习效率事半功倍
  8. java web 分页_Java Web(十一) 分页功能的实现
  9. 管理新语:如果经验有用,大家都去养老院招人了
  10. Android Trace View使用
  11. Linux CentOS 7安装Tomcat7的完整步骤。
  12. 【《离散数学》试卷(A)】离散数学期末考试题——分享篇——题目完善、答案详尽【推荐学习】
  13. haosou属于搜索引擎的_搜索引擎登录工具
  14. Perl 常用正则匹配
  15. windows和linux共用蓝牙鼠标,Linux 与 Windows 双系统共享蓝牙鼠标
  16. 直接插入法排序(c++单链表的实现)
  17. 后台集成解决方案 avue
  18. 销售额高达2.8亿的 “像素猫头鹰”项目Moonbirds,何以令NFT收藏家趋之若鹜?
  19. Native xdp hook 点
  20. 模拟招聘大赛题目关于计算机,模拟招聘大赛活动策划书范文

热门文章

  1. mPaas-WKWebview网络拦截常见问题
  2. 零起点入门教程:1分钟极简操作,新手也能搭应用
  3. MySQL数据库优化技巧大全
  4. 直击!10万阿里小二的复工生活
  5. java 传入参数_Java 中方法参数的传递
  6. python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据
  7. Python面向对象(三)
  8. 上线4年从畅销Top 200到Top 20,这款刀塔传奇like卡牌正在美国市场逆流而上
  9. 游戏运营期间我的项目开发经验总结——纪律性和卡顿处理
  10. 用 Unity 探究 2D 游戏的打击感