创建桑基图

PythonPythonBeginner
立即练习

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

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

简介

桑基图是一种流程图,用于展示资源或能量在不同阶段或系统之间的流动。在本教程中,我们将使用 Python 中的 Matplotlib 库来创建桑基图。

虚拟机使用提示

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

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

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

导入必要的库

在开始创建桑基图之前,我们需要导入必要的库。在本教程中,我们将使用 Matplotlib 库。

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

创建一个简单的桑基图

我们将从创建一个简单的桑基图开始,展示如何使用 Sankey 类。

Sankey(flows=[0.25, 0.15, 0.60, -0.20, -0.15, -0.05, -0.50, -0.10],
       labels=['', '', '', 'First', 'Second', 'Third', 'Fourth', 'Fifth'],
       orientations=[-1, 1, 0, 1, 1, 1, 0, -1]).finish()
plt.title("The default settings produce a diagram like this.")

这段代码将使用默认设置生成一个桑基图,其中包括流的标签和方向。生成的图表将显示标题 “The default settings produce a diagram like this.”。

自定义桑基图

我们可以通过更改流量、标签、方向和其他参数来自定义桑基图。在这个例子中,我们将创建一个路径更长且中间有一个标签的图表。

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
                     title="Flow Diagram of a Widget")
sankey = Sankey(ax=ax, scale=0.01, offset=0.2, head_angle=180,
                format='%.0f', unit='%')
sankey.add(flows=[25, 0, 60, -10, -20, -5, -15, -10, -40],
           labels=['', '', '', 'First', 'Second', 'Third', 'Fourth',
                   'Fifth', 'Hurray!'],
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0],
           pathlengths=[0.25, 0.25, 0.25, 0.25, 0.25, 0.6, 0.25, 0.25,
                        0.25],
           patchlabel="Widget\nA")  ## Arguments to matplotlib.patches.PathPatch
diagrams = sankey.finish()
diagrams[0].texts[-1].set_color('r')
diagrams[0].text.set_fontweight('bold')

这段代码将创建一个具有更长路径、中间有一个标签以及其他自定义参数的桑基图。生成的图表将显示标题 “Flow Diagram of a Widget”。

在桑基图中连接两个系统

我们还可以在桑基图中连接两个系统。在这个例子中,我们将创建一个连接两个系统的图表。

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Two Systems")
flows = [0.25, 0.15, 0.60, -0.10, -0.05, -0.25, -0.15, -0.10, -0.35]
sankey = Sankey(ax=ax, unit=None)
sankey.add(flows=flows, label='one',
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0])
sankey.add(flows=[-0.25, 0.15, 0.1], label='two',
           orientations=[-1, -1, -1], prior=0, connect=(0, 0))
diagrams = sankey.finish()
diagrams[-1].patch.set_hatch('/')
plt.legend()

这段代码将创建一个连接两个系统的桑基图。生成的图表将显示标题 “Two Systems”。

总结

在本教程中,我们学习了如何使用 Python 中的 Matplotlib 库创建桑基图。我们从一个简单的图表开始,然后通过更改流量、标签、方向和其他参数对其进行定制。我们还学习了如何在桑基图中连接两个系统。有了这些工具,我们可以为各种应用创建信息丰富且视觉上吸引人的流程图。