Plotly 桑基图
本教程将讨论使用 Plotly 中图形对象的 Sankey()
函数创建 Sankey 图。
Plotly 桑基图
桑基图将数据表示为不同节点通过链接连接的流程图。链接的宽度代表节点的值。
我们可以使用 plotly.graph_object
的 Sankey()
函数来创建 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_bgcolor
和 paper_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()
输出: