Plotly 桑基图

Ammar Ali 2022年5月14日
Plotly 桑基图

本教程将讨论使用 Plotly 中图形对象的 Sankey() 函数创建 Sankey 图。

Plotly 桑基图

桑基图将数据表示为不同节点通过链接连接的流程图。链接的宽度代表节点的值。

我们可以使用 plotly.graph_objectSankey() 函数来创建 Sankey 图。Sankey() 函数有两个主要参数,节点和链接。在 node 参数中,我们可以传递一个标签来定义每个节点的标签。

我们还可以传递节点的颜色、节点的粗细以及每个节点之间的距离。我们可以在链接参数中传递链接信息,如链接源、目标和值。

我们可以使用节点标签的索引来指定源节点和目标节点,其值可以是任意整数。例如,如果我们要连接前两个节点,我们将在源列表中传递 0,在目标列表中传递 1。

例如,让我们制作六个节点的桑基图。请参阅下面的代码。

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 50,
      thickness = 5,
      label = ["A", "B", "C", "D", "E", "F"],
      color = "blue"
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3],
      target = [5, 3, 3, 4, 4, 5],
      value = [3, 4, 2, 8, 4, 2]
  ))])

fig.show()

输出:

六个节点的桑基图

我们可以将节点的颜色更改为 Plotly 支持的任何颜色。如果我们只在 color 参数中传递一种颜色,所有节点都将具有相同的颜色。

我们可以使用颜色名称列表而不是单个颜色名称为每个节点赋予不同的颜色。我们也可以像改变每个节点的颜色一样改变每个链接的颜色。

我们还可以使用 node 参数中的 line 参数在每个节点周围添加一条线,我们还可以设置线的颜色和宽度。我们可以使用 update_layout 函数的 title_text 参数为图表添加标题,我们还可以使用 font_size 参数设置文本字体。

我们可以使用 valueformat 参数设置通过将鼠标悬停在链接上显示的值格式。我们还可以使用 valuesuffix 参数在每个值之后添加后缀。

我们还可以使用 orientation 参数更改桑基图的方向,并将其值设置为 v 表示垂直方向,h 表示水平方向。

我们还可以使用 update_layout() 函数中的 plot_bgcolorpaper_bgcolor 参数更改绘图背景颜色和纸张背景颜色。

我们还可以使用 hovertemplate 参数更改当光标悬停在链接或节点上时要显示的信息。如果我们想在悬停框中显示变量的值,我们可以使用百分号并将变量名称放在大括号内。

让我们更改上面提到的属性。请参阅下面的代码。

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    valueformat = ".0f",
    valuesuffix = " kg",
    orientation = "v",
    node = dict(
      pad = 50,
      thickness = 10,
      line = dict(color = "red", width = 2),
      label = ["A", "B", "C", "D", "E", "F"],
      color = ["blue","red","green","yellow","brown"]
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3],
      target = [5, 3, 3, 4, 4, 5],
      value = [3, 4, 2, 8, 4, 2],
      color = ["blue","red","green","yellow","brown"],
        hovertemplate='This link has total value %{value}<extra></extra>'
  ))])

fig.update_layout(title_text="Sankey Diagram", 
                  font_size=16,
                  plot_bgcolor='white',
                  paper_bgcolor='lightblue')
fig.show()

输出:

改变桑基图的属性

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - Plotly Plot