plotly sankey 图数据格式

Posted

技术标签:

【中文标题】plotly sankey 图数据格式【英文标题】:plotly sankey graph data formatting 【发布时间】:2021-11-26 12:30:08 【问题描述】:

plotly 库有一些漂亮的 sankey 图 https://plotly.com/python/sankey-diagram/

但数据要求您传递源/目标对的索引。

    link = dict(
      source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A1, B1, ...
      target = [2, 3, 3, 4, 4, 5],

我想知道是否有一个 API 可以简单地传递这些对的命名列表?

links = [
    'source': 'start', 'target': 'A', 'value': 2,
    'source': 'A', 'target': 'B', 'value': 2,
...
]

这更符合bokeh/holoviews 期望数据(但 sankey 不适用于自循环)

还有这个pysankey widget

所以我可以在不处理所有内容的情况下更接近我的数据框?

或者,有没有一种很好的 Pythonic 方法可以将其转换为单行:D

【问题讨论】:

【参考方案1】: 结构显然是 pandas 数据帧构造函数格式 从中创建一个数据框,以及节点的关键系列 由此可以很简单地构建一个桑基图
import pandas as pd
import numpy as np
import plotly.graph_objects as go

links = [
    'source': 'start', 'target': 'A', 'value': 2,
    'source': 'A', 'target': 'B', 'value': 1,
    'source': 'A', 'target':'C', 'value':.5

]

df = pd.DataFrame(links)
nodes = np.unique(df[["source","target"]], axis=None)
nodes = pd.Series(index=nodes, data=range(len(nodes)))

go.Figure(
    go.Sankey(
        node="label": nodes.index,
        link=
            "source": nodes.loc[df["source"]],
            "target": nodes.loc[df["target"]],
            "value": df["value"],
        ,
    )
)

【讨论】:

不错!所以你更喜欢nodes = np.unique(df.loc[:,["source","target"]].values.ravel()) 而不是键上的列表理解? [:,ravel 对我来说有点难以阅读......但我没有更简单的选择。 numpy.org/doc/stable/reference/generated/… 会做同样的事情。我一直在使用 pandas 和 numpy 很长一段时间,所以对这些成语感到满意...... :-) 也许这更易读np.unique(df[["source","target"]].values.flatten()) 以提高可读性 nodes = np.unique(df[["source","target"]], axis=None) 更简洁... 好多了,谢谢!你想编辑你的答案吗?反正我接受了

以上是关于plotly sankey 图数据格式的主要内容,如果未能解决你的问题,请参考以下文章

plotly Sankey 图:如何更改节点的默认顺序

Plotly:如何使用 pandas 数据框定义 sankey 图的结构?

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

无错误的空白空白Sankey图

Plotly:分类散点图格式