使用Python和d3js构建漂亮的Sankey图指南

2025 年 1 月 4 日 | 阅读 6 分钟

桑基图简介

桑基图是一种强大的可视化工具,用于说明资源、能源、成本或其他数量在系统中的流动。桑基图以 1898 年使用这种图表来描绘蒸汽机能量效率的马修·桑基 (Matthew Sankey) 船长命名,由于其能够以直观且视觉吸引人的方式表示复杂数据,这些图表已成为不同领域的基石。

什么是桑基图?

桑基图是一种流图,其中箭头或链接的宽度与流的大小成比例。该图由节点组成,节点代表不同的元素或阶段,以及链接,链接代表这些节点之间的流。桑基图的主要目的是显示系统中资源的循环和流动,从而可以轻松识别最大的流动和损失发生在哪里。

关键组件

  • 节点:这些是系统中的元素或阶段。每个节点代表流循环中的一个特定点。
  • 链接/箭头:这些表示节点之间的流。每个链接的宽度与其代表的数量相对应,便于分析不同的流。
  • 标签:这些通过命名节点以及可能的链接来提供额外的内容,使图表更具可读性。

桑基图的原理

桑基图遵循一些关键规则,以确保它们有效地传达有关资源、能源、成本或其他数量在系统中流动的的数据。理解这些规则有助于创建清晰、有用且在视觉上令人愉悦的桑基图。

  1. 比例表示
    桑基图中的箭头或流的宽度与其代表的数量成比例。此规则可确保每个流的视觉影响与其比例准确反映,从而更容易比较系统中的不同流。
  2. 流量守恒
    在设计得当的桑基图中,流入节点的总流量应等于流出节点的总流量,这反映了守恒定律。这在能量、质量或金钱守恒定律适用的系统中尤其重要。
  3. 方向流
    桑基图中的流应具有清晰的方向,通常是从左到右或从上到下。这种方向流有助于观众理解系统中的流动和运动。
  4. 清晰度和简洁性
    桑基图的设计应清晰地传达预期数据,而无需不必要的复杂性。标签、颜色和节点位置应经过精心确定,以提高可读性并避免混乱。
  5. 上下文和标签
    有效的桑基图包含节点和流的标签,以提供上下文。标签有助于观众识别每个节点代表的内容,并理解每个流中涉及的数量。
  6. 颜色编码
    有效使用颜色可以提高桑基图的可读性。不同的颜色可以代表不同的类别、来源或目的地,从而更容易区分流的不同部分。

设置环境

在 Python 中创建桑基图,Plotly 库因其易用性和强大的功能而成为流行的选择。

分步设置

安装 Plotly

导入必要的库

验证安装

要确保 Plotly 安装正确,您可以创建一个简单的绘图

准备数据

数据准备是创建有效桑基图的关键阶段。您需要定义节点以及它们之间的链接。

数据结构

  • 节点:一个包含所有节点名称的列表。
  • 链接:一个字典列表,其中每个字典都代表一个具有源、目标和值键的流。

示例

假设您想可视化项目中的资源流

创建基本桑基图

使用准备好的数据,您可以创建一个基本的桑基图。

示例

说明

  • 节点字典:定义节点的属性,如填充、厚度和标签。
  • 链接字典:定义链接的属性,包括源、目标和值。

自定义桑基图

自定义可以增强桑基图的视觉吸引力和可读性。

节点自定义

  • 填充(pad):更改节点之间的间距。
  • 厚度(thickness):设置节点的宽度。
  • 线条(line):修改节点的边框。

链接自定义

  • 颜色(color):设置链接的颜色。
  • 悬停信息(hoverinfo):格式化悬停在链接上时显示的信息。

高级自定义示例

添加交互性

  • 交互式桑基图允许用户更深入地探索数据。
  • Plotly 提供了一些交互功能,例如工具提示和动态更新。

交互功能

  • 悬停工具提示:在用户将鼠标悬停在节点或链接上时显示额外信息。
  • 可点击元素:允许用户与图表进行交互,例如点击节点查看详细信息。
  • 动态更新:根据用户输入或实时数据更新图表。

与 Python 集成

将桑基图集成到更广泛的 Python 应用程序中可能非常强大。例如,您可以创建交互式仪表板或自动化报告生成。

示例:与 Flask 集成

桑基图的应用

桑基图是多功能的工具,广泛应用于各个领域,用于可视化资源、能源、成本和其他数量的流动。它们以一种清晰直观的方式表示复杂系统的能力,使其适用于各种应用。以下是桑基图常用的几个关键领域:

1. 能源管理

桑基图广泛用于可视化系统中的能源流,例如发电厂、工业流程或国家能源消耗。它们可以显示能源的获取、转换和消耗方式,突出效率低下和改进机会。

示例: 可视化来自不同来源(煤炭、核能、可再生能源)到不同领域(住宅、工业、交通)的能源流。

2. 物料流分析

在制造和生产过程中,桑基图可以描绘物料在不同生产阶段的流动。这可以识别瓶颈、浪费以及回收的机会。

示例: 跟踪原材料从原材料到成品在工厂的流动,并确定产生浪费的地方。

3. 财务分析

桑基图可以表示组织内部的资金流,显示资金的分配和支出方式。这对于预算、财务规划和识别节省成本的机会非常有用。

示例: 显示公司收入在不同部门(研发、营销、运营)的分配及其各自的支出。

4. 供应链管理

在物流和供应链管理中,桑基图有助于可视化商品和物料从供应商到最终客户的移动。它们可以突出效率低下并优化供应链。

示例: 描绘来自多个供应商的商品流向一个中央仓库,然后流向各个零售店。

5. 环境研究

桑基图用于环境研究,以跟踪生态系统中有毒物质、废物或资源的流动。它们可以绘制污染物如何在空气、水或土壤中传播,以及对不同环境组成部分的影响。

示例: 显示来自不同工业活动产生的温室气体向环境不同部分(大气、海洋、森林)的流动。