npm 包 @plotly/d3-sankey 使用教程

阅读时长 14 分钟读完

在前端数据可视化领域,Sankey 图是一种非常有用的图表类型,可以帮助人们更好地理解复杂的数据流动关系。@plotly/d3-sankey 就是基于 d3-sankey 实现的 Sankey 图生成库,同 d3-sankey 相比,@plotly/d3-sankey 的数据绑定更加方便简洁,使用也更加简单快捷。

本文将详细介绍 @plotly/d3-sankey 的使用方法,并提供示例代码,帮助读者快速入门。

安装

首先,我们需要安装 @plotly/d3-sankey 这个 npm 包:

快速入门

下面我们将通过一个简单的示例来快速入门 @plotly/d3-sankey。

在页面中添加一个 div 元素,用于显示 Sankey 图:

我们使用 @plotly/d3-sankey 构造一个数据集,并将其绑定到 div 元素上:

-- -------------------- ---- -------
--- ---- - -
  ------ -
    - ----- --- --
    - ----- --- --
    - ----- --- -
  --
  ------ -
    - ------- ---- ------- ---- ------ -- --
    - ------- ---- ------- ---- ------ - --
    - ------- ---- ------- ---- ------ - -
  -
--

--- ------ - -
  ------- ----
  ------ ---
--

-------------------- --------------- ----- -
  -- ------- ----- ------

  --- ---- - ---------------------------
    --------------
    ----------- -------
    --------------- --------------
    -------------- --------------

  --- ------ - ------------------
    --------------
    ----------------
    -------------------- ----------------

  --- ---- - --------------

  -------------

  ----------------
    -------------------
    -----------------
    --------
    ---------------
    -------------- -------
    ---------- -----
    ---------------------- ----------- -
      ------ ----------- ------
    ---

  ----------------
    -------------------
    -----------------
    --------
    ---------------
    -------------- -------
    ---------- ----------- -
      ------ -----
    --
    ---------- ----------- -
      ------ -----
    --
    --------------- ----------- -
      ------ ---- - -----
    --
    -------------- ----------- -
      ------ ---- - -----
    --
    -------------- ----------- -
      ------ --------
    ---
---

上面这段代码的含义是,首先构造了一个包含三个节点和三条边的数据集,随后使用上述数据集构造了一个 Sankey 图,并将该图显示在了一个 id 为 sankey 的 div 元素中。

在 Sankey 图中,每个节点代表着一个状态,每个边代表着状态之间的转移。节点的大小和颜色可以调整,以体现该状态的重要性和状态之间的关系。边的宽度和颜色也可以调整,以表示转移的强度和类型。

上面这段代码的执行结果是一个包含三个节点和三条边的 Sankey 图,如下图所示:

API 说明

下面我们来介绍一下 @plotly/d3-sankey 的 API。

sankey() 函数

sankey() 函数用来构造一个 Sankey 图,并返回一个 Sankey 实例。它的语法如下:

sankey() 函数可以接受一个包含各种可选参数的对象,以更好地控制 Sankey 图的样式和布局。下面是 sankey() 函数中可选参数的详细说明:

  • nodeWidth: 定义 Sankey 图中每个节点的宽度,默认值为 24

  • nodePadding: 定义 Sankey 图中每个节点的间隔,默认值为 8

  • iterations: 定义 Sankey 图中每次迭代的次数,默认值为 32

  • size: 定义 Sankey 图的大小,默认值为 [1, 1]

  • linkSort: 定义 Sankey 图中边的排序方法,可选值为 'ascending''descending' 或一个自定义排序函数,默认值为 'ascending'

  • align: 定义 Sankey 图中节点的对齐方式,可选值为 'left''right''center' 或一个自定义函数,默认值为 'justify'

Sankey 对象

调用 sankey() 函数之后,将得到一个 Sankey 对象。

Sankey 对象有以下几个方法:

sankey(data)

sankey(data) 方法将一个数据集绑定到 Sankey 图中,并进行初始化。数据集应该符合以下形式:

-- -------------------- ---- -------
--- ---- - -
  ------ -
    -
      ----- ----- ---
      ------ ---------
    --
    -
      ----- ----- ---
      ------ ---------
    --
    -
      ----- ----- ---
      ------ ---------
    -
  --
  ------ -
    -
      ------- ----- ---
      ------- ----- ---
      ------ --
    --
    -
      ------- ----- ---
      ------- ----- ---
      ------ -
    --
    -
      ------- ----- ---
      ------- ----- ---
      ------ -
    -
  -
--

其中,links 数组中每个元素包含以下三个属性:

  • source: 边的起点节点的名称。

  • target: 边的终点节点的名称。

  • value: 边的宽度,表示状态之间的转移强度。

nodes 数组中每个元素包含以下两个属性:

  • name: 节点的名称。

  • color: 节点的颜色。

sankey(data) 方法会自动计算每个节点的大小和位置,以及每条边的弧度和位置。绑定的数据集在执行 sankey(data) 方法之前应该被按照一定的需求排序。

sankey.link()

sankey.link() 方法返回一个生成 Sankey 图中一条边的路径函数。该函数可以作为 d 属性绑定到路径元素中。

-- -------------------- ---- -------
--- ------ - -------------------

-- -----------
-- ---

--- ---- - --------------

-------------------
  ---------- --------------------
  -------------- --------

属性

Sankey 对象还有一些可以设置的属性:

  • nodeWidth: 同 sankey() 函数中的参数。

  • nodePadding: 同 sankey() 函数中的参数。

  • iterations: 同 sankey() 函数中的参数。

  • size: 同 sankey() 函数中的参数。

  • linkSort: 同 sankey() 函数中的参数。

  • align: 同 sankey() 函数中的参数。

示例代码

下面是一个更复杂的示例代码,用于生成一个更加生动、详细的 Sankey 图,并展示了更多 @plotly/d3-sankey 的 API 使用方法。

-- -------------------- ---- -------
--- ---- - -
  ------ -
    -
      ----- ----- ---
      ------ ----------
      --------- -
        -
          ----- ----- ----
          ------ ----------
          ------ --
        --
        -
          ----- ----- ----
          ------ ----------
          ------ -
        -
      -
    --
    -
      ----- ----- ---
      ------ ----------
      --------- -
        -
          ----- ----- ----
          ------ ----------
          ------ -
        --
        -
          ----- ----- ----
          ------ ----------
          ------ -
        -
      -
    --
    -
      ----- ----- ---
      ------ ----------
      --------- -
        -
          ----- ----- ----
          ------ ----------
          ------ -
        -
      -
    --
    -
      ----- ----- ---
      ------ ----------
      --------- -
        -
          ----- ----- ----
          ------ ----------
          ------ -
        -
      -
    -
  --
  ------ -
    -
      ------- ----- ----
      ------- ----- ----
      ------ -
    --
    -
      ------- ----- ----
      ------- ----- ---
      ------ -
    --
    -
      ------- ----- ----
      ------- ----- ----
      ------ -
    --
    -
      ------- ----- ----
      ------- ----- ----
      ------ -
    --
    -
      ------- ----- ----
      ------- ----- ----
      ------ -
    -
  -
--

--- ------ - -
  ------- ----
  ------ ---
--

-------------------- --------------- ----- -
  -- ------- ----- ------

  --- ---- - ---------------------------
    --------------
    ----------- -------
    --------------- --------------
    -------------- --------------

  --- ------ - ------------------
    --------------
    ----------------
    -------------------- ----------------

  --- ---- - --------------

  -------------

  ----------------
    -------------------
    -----------------
    --------
    ---------------
    -------------- -------
    ----------- ----------- -- -
      ------ ------ - --
    --
    ---------- -----
    ---------------------- ----------- -
      ------ ----------- ------
    --
    -------------- -------
    ------------------------ ----
    ---------------- ---------- -
      ---------------------------------------------- ---
    --
    --------------- ---------- -
      ---------------------------------------------- -----
    ---

  ----------------
    -------------------
    -----------------
    --------
    ---------------
    -------------- -------
    ---------- ----------- -
      ------ -----
    --
    ---------- ----------- -
      ------ -----
    --
    --------------- ----------- -
      ------ ---- - -----
    --
    -------------- ----------- -
      ------ ---- - -----
    --
    -------------- ----------- -
      ------ --------
    --
    ---------------------- --
    ---------------- -------
    ---------------- ---------- -
      --- ------ - --------------------------------------

      ----------------------------
        ------------------- -- -
          ------ ------------- -- ------ -- ------------- -- -------
        --
        ------------------------ ---

      ----------------------------
        ------------------- -- -
          ------ ------ -- -------
        --
        ---------------------- ---
    --
    --------------- ---------- -
      ----------------------------
        ------------------------ -----

      ----------------------------
        ---------------------- ---
    ---

  -----------------------
    ----------------
    ----------------- -
      ------ ------ - ---- - --------
    ---

  -----------------------
    ----------------
    ----------------- -
      ------ ------------- - - - - - ------------- - ---- - --------
    ---
---

运行上面这段代码之后,将会生成一个 Sankey 图,其中每个节点都有一些子节点,并且每个边的宽度都不同,如下图所示:

总结

本文介绍了 @plotly/d3-sankey 的使用方法和 API,详细和全面。通过示例代码和讲解,读者可以快速入门并掌握该 npm 包的使用技巧,学习到的知识不仅能够帮助开发者更加高效地生成 Sankey 图,还能够提高开发者的前端数据可视化水平,具有指导意义和深度。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/169551