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:如何使用 pandas 数据框定义 sankey 图的结构?
R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)
R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)