Python 绘制桑基图全面解析
目录
- 前言
- 题目再现
- 题目拆解
- 创建桑基图
- 添加桑基图选项
- 返回桑基图绘制完成的对象
- 3.完整源码
- 总结&后记
大家好,我是执念斩长河,一个刚刚学习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 绘制桑基图内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!
【来源:美国站群服务器 请说明出处】