今天的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所示。

桑基图 r语言network3D 怎么做桑基图_python

  图8-18 日常生活开支的桑基图

  图8-18中,桑基图的各个分支代表生活消费的每个选项,其中分支末端呈内凹形状的分支代表收入的数据,呈箭头形状的分支代表支出的数据。由图8-18可知,工资和副业这2个选项代表的分支均属于生活消费的收入数据,其余选项的分支均属于生活消费的支出数据,且深造选项的支出最多。