Plotly Sankey:如何避免将所有节点自动放置到右侧?

2024-10-02 14:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

用绘图键填充所有可用空间

如果一些“分支”有三个级别(节点0->;节点1->;节点3),而其他只有两个级别(节点0->;节点2),则最后的节点(节点2节点3)垂直向右对齐。
我希望能够垂直对齐节点1(而不是节点3!)和节点2,如附件中的第二个图所示

我很难通过编程方式对齐所有节点,因此我希望避免这种可能性

即使在前一种不希望出现的情况下,也会出现一些问题(Jupyter实验室的代码):

import plotly.graph_objects as go

sources = [ 0,  0,  1,  1]
targets = [ 1,  2,  3,  4]
values  = [59, 30, 29, 30]

labels = ['Node 0', 'Node 1', 'Node 2', 'Node 3', 'Node 4']

link = dict(source=sources, target=targets, value=values)
node = dict(label=labels)
data = go.Sankey(link=link, node=node)
fig = go.Figure(data)
fig.show(renderer="svg", width=1000, height=500)

产生:

default wrong placement

放置节点1时,似乎存在一个未考虑节点0->;厚度的错误;2流动

是否可以判断我希望节点2位于节点1的同一垂直线上,并且节点2没有子节点? 解决方案是手动放置,可惜我不能这样做,因为我的Sankey是高度动态的

作为一种解决方法,我在节点2之后创建了一个虚拟节点,并使其不可见:

import plotly.graph_objects as go

sources = [ 0,  0,  1,  1, 2]
targets = [ 1,  2,  3,  4, 5]
values  = [59, 30, 29, 30, 30]
labels = ['Node 0', 'Node 1', 'Node 2', 'Node 3', 'Node 4']

color_links = ["lightgray", "lightgray", "lightgray", "lightgray", "white"]
color_nodes = ["red", "blue", "green", "navy", "lightgreen", "white"]

link = dict(source=sources, target=targets, value=values, color=color_links)
node = dict(label=labels, color=color_nodes, line = dict(width = 0))
data = go.Sankey(link=link, node=node)
fig = go.Figure(data)
fig.show(renderer="svg", width=1000, height=500)

这将产生:

clumsy workaround

我希望有一个更好更简单的方法来做到这一点。 是否有指向正在运行的演示的指针


Tags: gtnodegodatalabels节点figlink