Matplotlib 简明教程

Matplotlib - Sankey Class

Sankey Class 在 matplotlib 中用于创建 Sankey diagrams ,在深入了解 Sankey 类之前,了解 Sankey 图的基本知识非常重要。

Sankey diagram 是一种强大的可视化工具,它表示不同实体或进程之间的资源、能量或信息的流动。它使用不同宽度的箭头来描述流动的数量,并且宽度与所表示的数量成正比。请参阅下图以了解简单的 Sankey 图的参考

sankey class intro

Key Components of a Sankey Diagram

  1. Nodes − 发生流动之间的实体或进程。

  2. Flows − 连接节点的箭头,表示流动的数量。

  3. Labels − 与节点或流动相关联的描述。

Sankey Class in Matplotlib

在 Matplotlib 中,Sankey() 类提供了一种创建这些图表的便捷方法。以下是该类的语法 −

Syntax

class matplotlib.sankey.Sankey(ax=None, scale=1.0, unit='', format='%G', gap=0.25, radius=0.1, shoulder=0.03, offset=0.15, head_angle=100, margin=0.4, tolerance=1e-06, **kwargs)

以下是使用 matplotlib Sankey 类创建 Sankey 图的步骤 −

  1. Creating a Sankey Object − 这可以通过使用 Sankey() 类来实现,该类初始化 Sankey 类的实例,该实例将用于构建图表。

  2. Adding the Flows and Labels − Sankey.add() 方法用于指定流动和标签。

  3. Finish and Display − Sankey.finish() 方法完成图表,plt.show() 显示图表。

Drawing a Basic Sankey Diagram

现在,让我们使用默认设置构建一个简单的 Sankey 图。以下示例创建一个输入和输出流动图。流动使用 flows 参数指定,而标签使用 labels 参数提供。

Example 1

这里是创建具有一个输入和输出流的 Sankey 图的示例。

import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey
sankey = Sankey()
sankey.add(flows=[1, -1],
   labels=['input', 'output'])
plt.title("Sankey Diagram")
sankey.finish()
plt.show()

在执行上述程序时,将生成以下 Sankey 图 −

sankey class ex1

Example 2

import matplotlib.pyplot as plt

from matplotlib.sankey import 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.")
plt.show()

在执行上述程序时,将生成以下 Sankey 图 −

sankey class ex2

Customized Sankey Diagram

Matplotlib Sankey class 提供了更多自定义选项,包括将多个 Sankey 图连接在一起、在图表的中间放置标签、隐式将关键字参数传递给 PathPatch()、更改箭头头的角度、在创建图表后更改贴片和标签的外观等。

Example

这是一个使用 matplotlib sankey() 类创建复杂自定义 Sankey 图的示例。

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

# Create a subplot
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Customized Sankey Diagram with Two Systems")

# Create a Sankey diagram
sankey = Sankey(ax=ax, scale=0.01, offset=0.2, format='%.0f', unit='%')

# Add flows and labels for the first system
sankey.add(flows=[25, 0, 60, -10, -20, -5, -15, -10, -40], label='one',
   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")

# Add flows and labels for the second system, connected to the first
sankey.add(flows=[-25, 15, 10], label='two',
   orientations=[-1, -1, -1], prior=0, connect=(0, 0))

# Finish the Sankey diagram and apply customizations
diagrams = sankey.finish()
diagrams[-1].patch.set_hatch('/')
diagrams[0].texts[-1].set_color('r')
diagrams[0].text.set_fontweight('bold')

# Display the diagram
plt.legend()
plt.show()

在执行上述程序时,将生成以下 Sankey 图 −

sankey class ex3