简介
在本实验中,我们将学习如何使用 matplotlib.sankey 模块中的 Sankey 类,通过 Python Matplotlib 创建一长串连接。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到 笔记本 标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入必要的库和模块
我们首先导入必要的库和模块。我们将使用 matplotlib.pyplot 和 matplotlib.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() 创建 figure 和 axis 对象。
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 创建一长串连接。我们定义了 side 和 corner 函数,分别用于生成侧链和角连接。我们还使用 Sankey 对象添加了第一个图表、侧链和角连接,并使用 plt.show() 显示了该图表。