微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对 Sankey 图中的节点进行排序Plotly

如何解决如何对 Sankey 图中的节点进行排序Plotly

我想实现一种可视化,显示一种状态到另一种状态之间的变化频率,将这些状态表示为数字。 My data looks like this调用 df_sankey

我正在考虑按照 documentation 中的示例绘制桑基图。所以我想要一列状态 A 为 I1,I2,...,I20 和另一列状态 B 为 F1,F2,F20。然后每对值之间的频率将表示为加权线as follows

但是,我无法根据状态数对列中的节点进行排序。 This is what I want to achieve.

这是我尝试过的:

#Create Labels
source = pd.DataFrame(np.arange(1,21),columns = ['source'])['source'].apply(lambda x: 'I' + str(x))
target = pd.DataFrame(np.arange(1,columns = ['target'])['target'].apply(lambda x: 'F' + str(x))
labels = pd.concat([source,target],axis=0).reset_index(drop=True)

#X-node
x_node = np.concatenate((np.ones(int(len(source)))*0.1,np.ones(int(len(target)))),axis = None)

#Y-node
y_node = np.tile(np.linspace(0,100,len(source)),2)

#Create Dataframe
df_nodes = pd.DataFrame(data = {'label': labels,'X': x_node,'Y': y_node})

#PLOT

fig = go.figure(data=[go.Sankey(
    arrangement='snap',node = dict(
      pad = 15,thickness = 20,line = dict(color = "black",width = 0.5),label = df_nodes['label'],color = "blue",x = df_nodes['X'],y = df_nodes['Y']
    ),link = dict(
      source = df_sankey['State_A']-1,#Indices correspond to labels,eg A1,A2,A1,B1,...
      target = df_sankey['State_B']+20-1,value = df_sankey['Freq']
  ))])

fig.update_layout(title_text="Basic Sankey Diagram",font_size=10)
fig.show()

有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。