更新时间:2022-06-14 来源:黑马程序员 浏览量:
今天的Python培训,我们主要讲一下桑基图。桑基图亦称为桑基能量分流图、桑基能量平衡图,是一种特定类型的流程图,用于展示数据的“流动”变化。桑基图中包含若干条从左到右延展的分支,每条分支的宽度代表着数据流量的大小,且所有主支宽度的总和等于所有分支宽度的总和,常见于能源、材料成分等场景或金融领域。
matplotlib.sankey模块中专门提供了表示桑基图的类Sankey,通过创建Sankey类的对象可以创建桑基图,之后可以调用add()方法为桑基图添加一些配置选项,最后调用finish()方法完成桑基图的绘制。
假设现在小明家日常生活的开支主要分为工资、副业、生活、购物、深造、运动、其他和买书几类,且其中每项投入或产出值分别为0.7、0.3、-0.3、-0.1、-0.3、-0.1、-0.1、-0.1。
下面结合这些日常生活开支的数据绘制一个桑基图,示例代码如下。
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.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()
运行程序,效果如图8-18所示。
图8-18 日常生活开支的桑基图
图8-18中,桑基图的各个分支代表生活消费的每个选项,其中分支末端呈内凹形状的分支代表收入的数据,呈箭头形状的分支代表支出的数据。由图8-18可知,工资和副业这2个选项代表的分支均属于生活消费的收入数据,其余选项的分支均属于生活消费的支出数据,且深造选项的支出最多。