使用 Matplotlib 创建桑基图

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习如何使用 matplotlib.sankey 模块中的 Sankey 类,通过 Python Matplotlib 创建一长串连接。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 笔记本 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入必要的库和模块

我们首先导入必要的库和模块。我们将使用 matplotlib.pyplotmatplotlib.sankey

import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey

定义每侧的连接数量

接下来,我们定义链条中每侧的连接数量。在这个例子中,我们将其设置为 6。

links_per_side = 6

定义 side 函数

现在,我们定义生成侧边链条的 side 函数。

def side(sankey, n=1):
    """Generate a side chain."""
    prior = len(sankey.diagrams)
    for i in range(0, 2*n, 2):
        sankey.add(flows=[1, -1], orientations=[-1, -1],
                   patchlabel=str(prior + i),
                   prior=prior + i - 1, connect=(1, 0), alpha=0.5)
        sankey.add(flows=[1, -1], orientations=[1, 1],
                   patchlabel=str(prior + i + 1),
                   prior=prior + i, connect=(1, 0), alpha=0.5)

定义 corner 函数

接下来,我们定义生成角连接的 corner 函数。

def corner(sankey):
    """Generate a corner link."""
    prior = len(sankey.diagrams)
    sankey.add(flows=[1, -1], orientations=[0, 1],
               patchlabel=str(prior), facecolor='k',
               prior=prior - 1, connect=(1, 0), alpha=0.5)

创建图形和坐标轴对象

现在,我们使用 plt.subplots() 创建 figureaxis 对象。

fig, ax = plt.subplots()

创建 Sankey 对象

接下来,我们使用 ax 对象创建 Sankey 对象,并将 unit 设置为 None

sankey = Sankey(ax=ax, unit=None)

添加第一个图表

我们使用 sankey.add() 并传入 flows=[1, -1]orientations=[0, 1] 来添加第一个图表。

sankey.add(flows=[1, -1], orientations=[0, 1],
           patchlabel="0", facecolor='k',
           rotation=45)

添加侧链和角连接

现在,我们使用 side()corner() 函数来添加侧链和角连接。

side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)

完成并显示桑基图

最后,我们使用 sankey.finish() 完成 Sankey 图,并使用 plt.show() 显示它。

sankey.finish()
plt.show()

总结

在本实验中,我们学习了如何使用 matplotlib.sankey 模块中的 Sankey 类,通过 Python 的 Matplotlib 创建一长串连接。我们定义了 sidecorner 函数,分别用于生成侧链和角连接。我们还使用 Sankey 对象添加了第一个图表、侧链和角连接,并使用 plt.show() 显示了该图表。