问题描述
使用 Python Plotly 尝试我的第一个桑基流程图。桑基流程图与正确的源和目标完美结合。但我无法包含节点标签。标签位于数据框内。如果没有各种来源和目标的标签,图表是不完整的。这是我使用的代码。我的目标是得到一个静态图。
{link = dict(source = Service_df,target=Manufac_df,value=Revenue_df)}
{node = dict(label=Label_df,pad=50,thickness=5)}
{data = dict(type = 'sankey',hoverinfo = 'all',link = link,node=node)}
{fig = go.figure(data)}
{fig.show() }
后来,我尝试硬编码源和目标的标签。这也不起作用。
当我将鼠标悬停在图表上时,我收到消息来源:未定义目标:未定义。同时,当鼠标悬停在 Source 或 Target 时,可以看到传入和传出的流量计数。
我正在 Jupyter Notebook Python 3.8.5 中尝试这个
数据框如下:
{MainData.info()}
列非空计数数据类型
0 服务 31 非空 int64
1 制造商 31 非空 int64
2 收入 31 非空 float64
数据类型:float64(1)、int64(2)
{LabelData.info()}
列非空计数数据类型
0 标签 10 非空对象 数据类型:对象(1)
我得到的图像在这里。 https://drive.google.com/drive/folders/1QDc-qVyMYSTJNI0coNJf8Ehuq8tlL-mP?usp=sharing
解决方法
如果没有看到您的数据框,我会假设您的 Label_df
的形状/大小与 link
中的数据框不同。
import pandas as pd
import plotly.graph_objects as go
# mock data,identical to the plotly documentation https://plotly.com/python/sankey-diagram/
Label_df = pd.DataFrame(["A1","A2","B1","B2","C1","C2"])
Service_df = pd.DataFrame([0,1,2,3,3])
Manufac_df = pd.DataFrame([2,4,5])
Revenue_df = pd.DataFrame([8,8,2])
link = dict(source = Service_df[0],target=Manufac_df[0],value=Revenue_df[0])
# this works
node = dict(label=Label_df[0],pad=50,thickness=5)
data = dict(type='sankey',hoverinfo='all',link=link,node=node)
fig = go.Figure(data)
fig.show()
# this gives Source:Undefined Target:Undefined
node = dict(label=list(Label_df[0]),node=node)
fig = go.Figure(data)
fig.show()