Python 绘制桑基图全面解析

 更新时间:2021年09月22日 16:57:06   作者:执念斩长河  
桑基图,即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。试了一下用python画桑基图,在这里整理了一下分享给大家

大家好,我是执念斩长河,一个刚刚学习python绘图的学渣,今天愉快学习《python数据可视化》(黑马程序员编著),其中的“绘制桑基图”内容,我将其成功实现,特此写博文纪念一下。

前言

桑基图亦称为桑基能量分流图、桑基能量平衡图,是一种特定类型的流程图,用于展示数据的“流动”变化。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表数据流量的大小。

题目再现

假设现在小明家日常生活的开支主要分为工资、副业、生活、购物、深造、运动、其他和买书几类,且其中每项投入或产出值分别为0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1,请结合这些日常生活开支的数据绘制一个桑基图

在这里插入图片描述

题目拆解

我们需要绘画出桑基图,首先知道创建桑基图的类.matplotlib.sankey模块中专门提拱了表示桑基图的类Sankey,通过创建Sankey类的对象可以创建桑基图,之后可以调用add()方法为桑基图添加一些配置选项,最后调用finish()方法完成桑基图的绘制.

创建桑基图

Sankey(ax=None, scale=1.0,unit='',format='%G',gap=0.25,radius=0.1,shoulder=0.03,
offset=0.15,head_angle=100,margin=0.4,tolerance=1e-06,**kwargs)

常用函数参数如下:

  • ax:若不提供该参数,则会创建一个新的坐标轴
  • scale:表示流量比例的因子,用于按比例调整分支的宽度
  • unit:表示与流量相关的物理单位的字符串.若设为None,则不会做数量标记
  • gap:表示进入或离开顶部或底部的分支间距,默认为0.25

添加桑基图选项

Sankey类对象可以调用add()方法为桑基图添加数据流量、标签等选项

add(self,patchlabel='',flows=None,orientations=None,labels='',
trunklength=1.0, pathlengths=0.25,prior=None,connect=(0,0),
rotation=0,**kwargs)

常用参数如下:

  • patchlabel:表示位于图表中心的标签
  • flows:表示流量数据数组,其中投入数据为正值,产生数据为负值。
  • orientations:表示流的方向列表或用于所有流的单个方向,可以取值为0(从左侧输入、右侧输出)、1(从顶部到顶部)或-1(从底部到底部)
  • labels:表示流的标签列表或用于所有流的单个标签
  • trunklength:表示输入组和输出组的基之间的长度

返回桑基图绘制完成的对象

Sankey类对象在添加数据之后需要调用finish()方法完成绘制,并返回包含多个桑基子图列表,桑基子图包含以下字段.

  • patch:表示桑基子图的轮廓
  • flows:表示流量值(输入为正,输出为负)
  • angles:表示箭头角度的列表
  • tips:表示流路径的尖端或凹陷位置的数组,其中每一行是一个(x,y)
  • text:表示中心标签的Text实例
  • texts:表示流分支标签的Text实例

3.完整源码

if __name__ == '__main__':
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.sankey import Sankey

    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False

    # 消费收入与支出数据
    flows = [0.7, 0.3,-0.3,-0.1,-0.3,-0.1,-0.1,-0.1]
    # 流的标签列表
    labels = ["工资","副业","生活","购物","深造","运动","其他","买书"]
    # 流的方向
    orientations = [1,1,0,-1,1,-1,1,0]
    # 创建Sankey类对象
    sankey = Sankey()
    sankey.add(flows=flows, # 收入与支出数据
               labels = labels, # 数据标签
               orientations = orientations, # 标签显示的方向
               color='black', # 边缘线条颜色
               fc="lightgreen", # 填充颜色
                patchlabel="生活消费", # 图表中国心的标签
               alpha=0.7)

    # 桑基图绘制完成的对象
    diagrams = sankey.finish()
    diagrams[0].texts[4].set_color("r")   # 将下标为4的数据标签设为红色
    diagrams[0].texts[4].set_weight("bold") # 将下标为4的数据标签设为字体标签
    diagrams[0].text.set_fontsize(20)     # 将中心标签的字体大小设为20
    diagrams[0].text.set_fontweight("bold") # 将中心标签的字体设为加粗
    plt.title('日常生活开支的桑基图')
    plt.show()

总结&后记

桑基图真好玩,感觉挺有趣的。

到此这篇关于Python 绘制桑基图全面解析的文章就介绍到这了,更多相关python 绘制桑基图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中functools模块的常用函数解析

    Python中functools模块的常用函数解析

    这篇文章主要介绍了Python中functools模块的常用函数解析,分别讲解了partial、update_wrapper、wraps、total_ordering的用法,需要的朋友可以参考下
    2016-06-06
  • Python 的Json 模块编码详解

    Python 的Json 模块编码详解

    这篇文章主要为大家介绍了Python 的Json 模块编码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-11-11
  • Python学习之面向函数转面向对象详解

    Python学习之面向函数转面向对象详解

    本文将针对类进行一个综合练习,利用所学的面向对象编程、类的知识将我们之前做的面向函数编写的学生信息库重构为面向对象的方式,感兴趣的可以了解一下
    2022-03-03
  • 基于Python实现文本文件转Excel

    基于Python实现文本文件转Excel

    Excel文件是我们常用的一种文件,在工作中使用非常频繁。Excel中有许多强大工具,因此用Excel来处理文件会给我们带来很多便捷。本文就来和大家分享一下Python实现文本文件转Excel的方法,感兴趣的可以了解一下
    2022-08-08
  • Django配置kafka消息队列的实现

    Django配置kafka消息队列的实现

    本文主要介绍了Django配置kafka消息队列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • numpy工程实践之np.savetxt()存储数据

    numpy工程实践之np.savetxt()存储数据

    NumPy提供了多种存取数组内容的文件操作函数,保存数组数据的文件可以是二进制格式或者文本格式,下面这篇文章主要给大家介绍了关于numpy工程实践之np.savetxt()存储数据的相关资料,需要的朋友可以参考下
    2023-05-05
  • Python实现利用163邮箱远程关电脑脚本

    Python实现利用163邮箱远程关电脑脚本

    这篇文章主要为大家详细介绍了Python实现利用163邮箱远程关电脑脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • pytorch算子torch.arange在CPU GPU NPU中支持数据类型格式

    pytorch算子torch.arange在CPU GPU NPU中支持数据类型格式

    这篇文章主要为大家介绍了pytorch算子torch.arange在CPU GPU NPU支持数据类型格式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Python filter过滤器原理及实例应用

    Python filter过滤器原理及实例应用

    这篇文章主要介绍了Python filter过滤器原理及实例应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python实战之屏幕录制功能的实现

    Python实战之屏幕录制功能的实现

    屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文 主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助
    2025-03-03

最新评论